@escaping
な non-@Sendable
クロージャは actor context を引き継ぐという理解なんですけど、↓の foo
が返すクロージャは常にメインスレッドで実行される( true が表示される)ということでしょうか? @MainActor func foo() -> () -> Void { // main actor context { // actor context を引き継ぐ print(Thread.isMainThread) } }
この foo
で返されたクロージャを Task.detached
から呼び出すと false
が表示されたんですが、これは僕の仕様理解が間違っているか、バグか、未実装か、実行方法に問題がある(何かオプションを付けないといけないなど)か、どう考えれば良いでしょうか? (edited)async
でないからメインスレッドで同期実行というのが破綻してるか。DispatchQueue.global().async
みたいな API に渡すケースは今は穴が空いているけど、将来的にはそういう穴は塞がれる( DispatchQueue.global().async
のような API が廃止される?)みたいな話をしたと思うんですが、↑のようなケースはどうなるんでしょう? foo
がコンパイルエラー? func foo() -> @MainActor () -> Void
じゃないといけない?