Task.init
にキャプチャされてもデータ競合起こさないと思うんですが。 final class Foo { var value: Int = 0 }
actor Bar { func useFoo(foo: sending Foo) { Task { foo.value += 1 } foo.value += 1 } }
(edited)MainActor
ばっか使ってるから、 actor
でもできると思ってた。↓は通る。 @MainActor func useFooMain(foo: sending Foo) { Task { foo.value += 1 } foo.value += 1 }
actor
のメソッドでもダメなので、↓も当然ダメ。これも安全に思うけど。 func useFoo<A: Actor>(actor: isolated A, foo: sending Foo) { Task { foo.value += 1 } foo.value += 1 }
(edited)