Swift异步编程:async let与async let await的区别疑问
async let 中带 await 和不带 await 的区别解析 核心本质差异
不带
await的标准写法:async let resultA = myAsyncFunc()
这是async let的常规用法:直接触发myAsyncFunc()异步任务,同时将resultA绑定到该任务的未来结果。当前上下文不会被阻塞,任务会立即进入调度队列执行。带
await的冗余写法:async let resultB = await myAsyncFunc()
这种写法的本质是在async let创建的隐式子任务内部执行await myAsyncFunc():async let先创建一个新的异步子任务;- 子任务内部调用
myAsyncFunc()并等待它完成; - 子任务结束后将结果绑定到
resultB。
但由于子任务本身是异步调度的,当前上下文依然不会被阻塞,myAsyncFunc()同样会立即启动。
为什么你的示例表现完全一致
在你的测试代码中,两种写法最终都会立即启动对应的异步函数(myAsyncFuncA和myAsyncFuncB),且当前上下文不会等待任意一个任务完成,因此两个任务会并行执行。总耗时由耗时最长的任务(6秒的myAsyncFuncA)决定,所以输出结果完全相同。
关键注意事项
带
await的写法无意义:
额外的await没有实际作用,反而多了一层子任务包装,会产生微小的性能开销。日常开发中直接使用标准的async let result = myAsyncFunc()即可。和当前上下文
await的区别:
要严格区分async let内部的await和当前上下文的await:// 这种写法会阻塞当前上下文,直到任务完成,无法实现并行 let result = await myAsyncFunc()
内容的提问来源于stack exchange,提问作者Trajanos
相关产品推荐
相关产品推荐

