hironytic
(B) が MainActor ではないところが微妙
↑の話で考えると、 (B) は最終的な仕様上 MainActor にならないし、現状でも MainActor に守られているわけではないけど、 self.nameLabel.text = ...
みたいなのが書けないと既存コードが破壊されまくるので、現状ではコンパイラが MainActor 扱いにしてコードの互換性を保っている(ただし守られてはいない)、 Swift 6 では MainActor でなくなるし await
必須になる、ということになる? そして、それと bar
をすっ飛ばして Task.init
が foo
の context を引き継ぐ話はまた別で、 @Sendable
は actor の context をぶった切る、 @Sendable
でない @escaping
なクロージャが何かの actor の context を持つことはないと考えると、 Task.init
に渡されるクロージャは、それが宣言された場所で最も近い(内側のスコープの) actor を引き継ぐと考えれば一般化できる? という感じでしょうか。