WWDC21-Concurrency-BehindTheScenes
1.Threading Model1.1 GCD code123456789101112131415161718func deserializeArticles(from data: Data) throws -> [Article] { /* ... */ }func u
...
WWDC21-Concurrency-Actors
1.前言
数据竞争使得并发更加困难。代码很琐碎、很难调试
async task不能捕获mutable变量
2.Actors
actors为共享的mutable变量提供synchornization
actors的属性是和其他代码分离开的
要想访问actors的属性,只能通过actors
actor
...
WWDC21-Concurrency-Structured
1. 前言
闭包形式的异步代码并不是structured
调用async函数并不会创建一个task,task只能通过显式声明来创建
2. Async-let Tasks
try-await取值方式,会阻塞当前线程。当取值完成之后才会赋值给变量并恢复线程
let (data, response)
...
WWDC21-Concurrency-AsncSequence
1. for-await-in1for try await event in endpointURL.lines
可以中断循环:break/continue
可以和其他任务同步进行:
let iteration1 = async {
for await quake in quakes
...
WWDC21-Concurrency-AsyncAwait
1.Async/await
异步闭包的缺点:要保证方法中的每个分支都要执行闭包
swift能保证有返回值的函数,如果没有返回某个值,就会抛出异常(这个工作可以由swift来做)
但是异步闭包却无法保证在每个分支中都执行闭包
async/await可以解决这个问题
12345678910111
...