SwiftUI 中的 `Task` 和 `async` 有什么区别
What's the difference between `Task` and `async` in SwiftUI
所以我看到了这样的代码:
func doSomething() {
async {
let foo = await something()
}
}
对
func doSomething() {
Task {
await doSomething()
}
}
任务还有修改版本:
TextView(...)
.task {
let foo = await something()
}
我想知道这些有什么区别,我应该使用哪一个?
async { ... }
已弃用。我什至找不到 async
函数的文档页面。它已被 Task { ... }
取代,后者使用 Task
的 this initialiser。
Task { ... }
将异步操作作为顶级任务运行。
另一方面,.task
视图修饰符是一个视图修饰符,运行异步操作当视图出现时。重要的是,此任务与视图具有相同的生命周期。如果视图被删除,任务也会被取消。
比较:
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()
}
所以我看到了这样的代码:
func doSomething() {
async {
let foo = await something()
}
}
对
func doSomething() {
Task {
await doSomething()
}
}
任务还有修改版本:
TextView(...)
.task {
let foo = await something()
}
我想知道这些有什么区别,我应该使用哪一个?
async { ... }
已弃用。我什至找不到 async
函数的文档页面。它已被 Task { ... }
取代,后者使用 Task
的 this initialiser。
Task { ... }
将异步操作作为顶级任务运行。
另一方面,.task
视图修饰符是一个视图修饰符,运行异步操作当视图出现时。重要的是,此任务与视图具有相同的生命周期。如果视图被删除,任务也会被取消。
比较:
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()
}