我有一个延续:
func a() async -> Int {
await withCheckedContinuation { continuation in
continuation.resume(returning: 3)
}
}
我希望此函数的所有调用者都能在MainActor上接收结果。我不希望调用者必须明确指定此重新安排。我不想这样
func c() async {
let three = await a()
await MainActor.run {
b(three)
}
}
相反,我希望返回后的整个代码在MainThread上执行,直到下一个挂起点,类似于这样:
func c1() async {
let three = await a()
b(three) // Guaranteed main thread, although nothing speaks of it here
}
在某种程度上,我希望a
声明I return only on main actor!
,如下所示:
func a() @MainActor async -> Int {
await withCheckedContinuation { continuation in
continuation.resume(returning: 3)
}
}
有什么办法能做到这一点吗?
**更新:**两位评论者都建议我用@MainActor
注解封闭函数c
和c1
。
@MainActor
func c() async {
let three = await a()
await MainActor.run {
b(three)
}
}
这不像我需要的那样。它说:
- 每次我等待某人,他们必须返回主线程
但我需要的是这个
- 每次有人等我的时候,他们必须在主线程上得到我的结果
2条答案
按热度按时间ql3eal8s1#
应该可以这样:
pxy2qtax2#
不,没有办法做到这一点。
如果你等待某个函数,你可以决定它将在哪个线程上返回。但是作为一个等待的函数,您不能确保您的结果将被传递给特定线程和/或主线程上的调用者。