🔥
SwiftPlaygroundでのTaskの実行順序こわい
(Xcode 13.2.1の)SwiftPlaygroundでTaskの実行順序調べてたら驚いた。
コード
import _Concurrency
import Foundation
print("1_0")
Task {
print("2_0")
Task {
print("3_0")
try await Task.sleep(nanoseconds: 10)
print("3_1")
}
print("2_1")
}
print("1_1") // 期待としてはここが1_0のあとに呼ばれてほしい
出力は下記
1_0
2_0
1_1
2_1
3_0
3_1
"1_1"の実行前にTaskに突入しちゃってる!?しかも"1_1"に行く前に"2_1"で抜けてる...
いやそういうもんだっけ?
おちついてMainActorを書くんだ...。
import _Concurrency
import Foundation
@MainActor
struct Sample {
func start() {
print("1_0")
Task {
print("2_0")
Task {
print("3_0")
try await Task.sleep(nanoseconds: 10)
print("3_1")
}
print("2_1")
}
print("1_1")
}
}
Task {
await Sample().start()
}
出力は下記。ちゃんとしてる。
1_0
1_1
2_0
2_1
3_0
3_1
結論。Swift PlaygroundでTask使うときの実行順序どうなってんの?
Discussion