如何使用新的 Swift 结构化并发启动后台任务?
Posted
技术标签:
【中文标题】如何使用新的 Swift 结构化并发启动后台任务?【英文标题】:How to start a background task with the new Swift Structured Concurrency? 【发布时间】:2021-10-14 14:24:00 【问题描述】:我正在用 Swift 编写测试。我正在测试的函数阻塞了当前线程,所以我想在后台运行它。以前我会用DispatchQueue.global.async
包装它。
借助 Swift 新的结构化并发,我找到了Task.detached
。但是,上面的注释说
通常应避免创建分离任务,而应使用
async
函数、async let
声明和await
表达式
如果没有 async
标志,Apple 是否有另一种推荐的异步启动方式?
【问题讨论】:
谢谢@Rob。我错过了那部分。你想让它成为一个答案吗? 【参考方案1】:文档只是告诉您,在许多情况下,应该首选结构化并发,但是在您需要非结构化并发的地方,请随意使用它。
话虽如此,您可以只启动一个非结构化任务,而不是创建一个独立的任务。见The Swift Programming Language: Concurrency: Unstructured Tasks。简而言之,与其使用Task.detached …
创建分离任务,不如使用Task …
【讨论】:
以上是关于如何使用新的 Swift 结构化并发启动后台任务?的主要内容,如果未能解决你的问题,请参考以下文章
Swift 两种方式实现 async/await 并发模型中任务超时(timeout)的取消
Swift 两种方式实现 async/await 并发模型中任务超时(timeout)的取消
Swift新async/await并发模型中子任务取消不能被其它子任务感知的原因及解决