所以我见过这样的代码:
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/