如何使用新的 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 • 如何从视图的初始化程序启动后台任务?

Swift新async/await并发模型中子任务取消不能被其它子任务感知的原因及解决

Swift新async/await并发模型中子任务取消不能被其它子任务感知的原因及解决

后台任务未在 Swift 中重新启动