大师学SwiftUI第9章Part 1 - 异步并发之Task、Async、Await和错误

其它相关内容请见虚拟现实(VR)/增强现实(AR)&visionOS开发学习笔记

苹果系统借助现代处理器的多核可同步执行多条代码,提升同一时间内程序所能执行的任务。例如,一段代码从网上下载文件,另一段代码可以在屏幕上显示进度。此时,我们不能等待第一个执行完后再执行第二个,而必须要同步执行这两个任务。

要并行处理代码,系统将代码单元分组成任务。在Swift中,任务可以通过异步和并发编程实现。异步编程是一种编程模式,代码在完成任务前等待处理完成。这样系统可以在不同进程间共享计算资源。等待期间,系统可使用资源执行其它任务。而并发编程实现的代码可以利用多核同步执行多个任务。

图9-1:异步和并发编程

图9-1:异步和并发编程

因很多应用可以同时运行,系统并不会对每个应用分配指定的核数。系统会创建一些执行线程,将任务分配给这些线程,然后根据可用资源决定哪个核执行哪些线程。在图9-1的示例中,左边是一个异步任务,从网上加载图片然后在屏幕上显示。在等待服务响应时,线程处于空闲状态可以执行其它任务,因此系统可以使用它执行更新进度条的任务。右图中创建了并发任务,因此在不同进程中同步执行。

任务

异步和并发的代码由任务定义。Swift标准库中包含有Task结构体用于创建和管理这些任务。下面是结构体的初始化方法:

  • Task(priority: TaskPriority?, operation: Closure):这个初始化方法创建并运行新任务。priority参数是一个辅助系统决定何时执行任务的结构体。这一结构体中包含类型属性定义标准优先级。当前有backgroundhighlowmediumuserInitiatedutilityoperation参数是一个闭包,内含任务执行的语句。

Task结构带有如下属性用于取消任务。

  • isCancelled:该属性返回一个表示任务是否被取消的布尔值。
  • cancel():取消任务的方法。

还有一些类型属性和方法,可用于从当前任务获取信息或创建执行指定处理的任务。以下是最常用的。

  • currentPriority:该属性返回当前任务的优先级。这是一个TaskPriority结构体,有属性backgroundhighlowmediumuserInitiatedutility
  • isCancelled:该属性返回一个表示当前任务是否取消的布尔值。
  • sleep(nanoseconds: UInt64):本方法按照nanoseconds参数指定的时间挂起当前任务。

虽然可以在代码的任意地方创建Task结构体初始化异步任务,SwiftUI自带了如下的修饰符在视图出现时进行创建。

  • task(priority: TaskPriority, Closure):此修饰符在视图出现时执行第二个参数所指定的任务。priority参数是一个结构体,辅助系统决定何时执行任务。值有backgroundhighlowmediumuserInitiatedutility
  • task(id: Value, priority: TaskPriority, Closure):此修饰符在视图出现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值