ios - async/await 概念中 async、detach 和 asyncDetached 函数的区别
问题描述
如果我理解正确,async, detach and asyncDetached
两者都会创建一个任务(并发单元),简单来说,它允许我们在其中执行await
方法。async
和我能找到的唯一区别是从被调用上下文(至少是优先级)detach
继承属性的区别。
我对我对它们之间的差异的误解毫无疑问。但不幸的是,即使在 WWDC 视频中也找不到正确的解释。
解决方案
名称async
,detached
并且asyncDetach
随着时间的推移而演变。我们现在不调用async
(或detached
)来启动非结构化任务,而只是Task(priority:operation:)
. 正如Swift 编程语言:并发:非结构化并发所说:
非结构化并发
除了前几节中描述的结构化并发方法外,Swift 还支持非结构化并发。与属于任务组的任务不同,非结构化任务没有父任务。您可以完全灵活地以程序需要的任何方式管理非结构化任务,但您也要对它们的正确性负全部责任。要创建在当前参与者上运行的非结构化任务,请调用
Task.init(priority:operation:)
初始化程序。要创建不属于当前参与者的非结构化任务,更具体地称为分离任务,请调用Task.detached(priority:operation:)
类方法。这两个操作都返回一个任务句柄,让您可以与任务交互——例如,等待其结果或取消它。
SE-0304说:
分离任务是独立于创建它的上下文的非结构化任务,这意味着它不继承优先级、任务本地值或参与者上下文。
分离任务也在 WWDC 2021 视频探索 Swift 中的结构化并发的后半部分进行了广泛讨论。
推荐阅读
- php - 按照教程还是ioncube_loader_win_5.6.dll报错
- python - 在构造函数中指定 pandas 索引名称
- c# - CORS 不适用于 .NET Core API 和 Angular 前端
- python - 在列表程序中,打印语句没有正确连接为浮点数
- java - Mockito:如何在方法调用中返回模拟类对象
- duplicates - 比较 Alteryx 中的两行,并仅考虑其中的一个到进一步的步骤
- ios - 在 Swift 的另一个函数中接收委托数据?
- node.js - MongoDB $ne 运算符不适用于嵌套对象属性
- go - 如何将 go-retryablehttp 与具有自定义传输的客户端一起使用?
- kotlin - 重载 sumOf 并在 Kotlin 中同时使用预先编写的和我自己的