func f() async
にするとデッドロックしなくなった。これでniwさんの環境を再現できた気がするawait a.f()
以下と fの async { .. }
ブロックの中が同じスレッドで実行されるようになるっぽい…import Foundation actor A { var c = 0 func inc() -> Int { c += 1 return c } func f() async { async { print("begin f") print(Thread.current) print(inc()) print("end f") } } } _runAsyncMain { print(Thread.current) let a = A() await a.f() print("begin main") print(Thread.current) print(await a.c) print("end main") }