Avatar
いやClosure内部なので保証されていない気がする
やっぱり引き継がれないですねー func runEscaping(_ operation: @escaping () -> Void) { Task.detached { // Taskも同じ結果 print("3", Thread.isMainThread) // false operation() } } @MainActor final class Bar { func countUp() { print("1", Thread.isMainThread) // true runEscaping { print("2", Thread.isMainThread) // false } } } ↓はWWDCのセッションで言われていた通り、nonisolatedなsync関数は呼び出し側のcontextに依る(そもそもescapingしないのか) func runEscaping(_ operation: @escaping () -> Void) { print("3", Thread.isMainThread) // true operation() } @MainActor final class Bar { func countUp() { print("1", Thread.isMainThread) // true runEscaping { print("2", Thread.isMainThread) // true } } }
(edited)