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