【问题标题】:How to start a background task with the new Swift Structured Concurrency?如何使用新的 Swift 结构化并发启动后台任务?
【发布时间】:2021-10-14 14:24:00
【问题描述】:

我正在用 Swift 编写测试。我正在测试的函数阻塞了当前线程,所以我想在后台运行它。以前我会用DispatchQueue.global.async {} 包装它。

借助 Swift 新的结构化并发,我找到了Task.detached。但是,上面的注释说

通常应避免创建分离任务,而应使用async 函数、async let 声明和await 表达式

如果没有 async 标志,Apple 是否有另一种推荐的异步启动方式?

【问题讨论】:

  • 谢谢@Rob。我错过了那部分。你想让它成为一个答案吗?

标签: swift async-await


【解决方案1】:

文档只是告诉您,在许多情况下,应该首选结构化并发,但是在您需要非结构化并发的地方,请随意使用它。

话虽如此,您可以只启动一个非结构化任务,而不是创建一个独立的任务。见The Swift Programming Language: Concurrency: Unstructured Tasks。简而言之,与其使用Task.detached { … } 创建分离任务,不如使用Task { … }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    • 2020-01-10
    相关资源
    最近更新 更多