假设我在一个被注释为@MainActor
的类中,以便所有函数都与主要actor相关联。我试图理解以下操作之间的区别:
func bar() {
Task.detached(priority: .background) {
await foo()
}
}
func foo() async {
...
}
vs
func bar() {
Task(priority: .background) {
await foo()
}
}
nonisolated func foo() async {
...
}
他们是相同的吗?
foo
的演员将被隔离到哪里”的方面,两种情况是一样的,但可能还有其他方面我没有考虑。另外请注意,如果foo
是“非隔离的”,则可以通过其他代码在非主线程上运行。 - Sweeperfoo
不是在非主线程上运行吗? - Tometoyoufoo
被隔离到主角色中,因为它在带有@MainActor
声明的类内部。这并不重要它是从不在主角色上的分离任务中调用的;第一个foo
仍将在主角色上运行。 - Rob