swift - SwiftUI 中的 `Task` 和 `async` 有什么区别

标签 swift swiftui async-await

所以我见过这样的代码:

func doSomething() {
  async {
    let foo = await something()
  }
}

func doSomething() {
  Task {
    await doSomething()
  }
}

还有一个任务的修改器版本:

TextView(...)
  .task {
    let foo = await something()
  }

我想知道这些和我应该使用哪一个有什么区别?

最佳答案

async { ... } 已弃用。我什至找不到 async 函数的文档页面。它已被 Task { ... } 取代,它使用 this initialiser 任务

Task { ... } 将异步操作作为顶级任务运行。

.task另一方面, View 修饰符是一个 View 修饰符,当 View 出现时运行异步操作。重要的是,此任务与 View 具有相同的生命周期。如果 View 被移除,任务也会被取消。

比较:

func foo() {
    Task {
        await doWork() // gets started when foo is called
    }
}

Text("Hello")
    .task {
        // gets started when "Hello" appears,
        // *not* when .task is called
        await doWork() 
    }

关于swift - SwiftUI 中的 `Task` 和 `async` 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70979038/

相关文章:

ios - 无法设置其中包含可调整大小的图像的 HStack

javascript - 异步箭头函数的语法

ios - 有没有更好的方法来排除 tvOS 的 navigationBarTitle?

ios - 使用方法减少代码

swift - 在 Realm Swift 中推断查询中的类型而不是字符串谓词?

swift - 如何理解 Swift 中的柯里化(Currying)?

macos - 如何使用 swiftUI 获取 ComboBox

rust - 为什么我需要先固定一个 future ,然后才能等待对它的引用?

c# - C#中基于任务的异步方法的超时模式

ios - 快速 NSPredicate 逻辑或