Avatar
Avatar
shiz
migration guideでは、isolation domainはactor-isolated、globalactor-isolated、nonisolatedの3つとされていて、そこは変わらないのかなあと思っています。 (edited)
migration guideのその記述、ちょっとわかりづらい気がしていて、たとえば、↓のコードでは foo がisolation boundaryを越えるわけですが、これはnon-isolatedなisolation domainからnon-isolatedなisolation domainに越境してることになりますよね? final class Foo { var value: Int = 0 } Task.detached { let foo = Foo() Task.detached { foo.value += 1 print(foo.value) } foo.value += 1 print(foo.value) } isolation domainが三つというのは "fall into one of three categories" でisolation domain自体の数の話ではないので、non-isolatedなカテゴリーに属するisolation domainが複数あっても良いと思いますが、 Task インスタンスに紐づくisolation domainがあると考えた方が直観的かなと。 nonisolated async func が呼び出し元のisolation domainで実行されるようになるなら、non-isolatedなisolation domainとは基本的に(contextを引き継がない) Task インスタンスに紐づけられたisolation domainになるんじゃないでしょうか(すべてのasync contextは Task 上で実行されるのでactorに紐づいたisolation domainじゃないときは Task に紐づいたisolation domainになるのかなと)。
👀 1