🏉
Swiftのスレッド関係のちょっとしたこと調査隊
Task
async
await
関係のちょっとしたことを調査する。
環境
Ventura 13.6.5
Mac mini M1
Xcode 15.2
コード
DispatchQueue.main.async {
print("1", Thread.current)
}
print("2", Thread.current)
Task {
print("3", Thread.current)
DispatchQueue.main.async {
print("4", Thread.current)
}
await a()
}
print("5", Thread.current)
func a() async {
print("6", Thread.current)
try? await Task.sleep(nanoseconds: 1000)
print("7", Thread.current)
}
結果
2 <_NSMainThread: 0x60000170c040>{number = 1, name = main}
5 <_NSMainThread: 0x60000170c040>{number = 1, name = main}
1 <_NSMainThread: 0x60000170c040>{number = 1, name = main}
3 <_NSMainThread: 0x60000170c040>{number = 1, name = main}
6 <_NSMainThread: 0x60000170c040>{number = 1, name = main}
4 <_NSMainThread: 0x60000170c040>{number = 1, name = main}
7 <_NSMainThread: 0x60000170c040>{number = 1, name = main}
考察
5より1が後なので2から5は一気に行く。
1より3が後なので Task {}
は後回しになる
6より4が後なので async
メソッドはそのまま進入する
4より7が後なので async
メソッドは止まったところで後回しにする
満足
async
メソッドは、頭から後回しになるのか、行けるところまで行ってから後回しにするのかを調査したかった。行けるところまで行くらしい。
さいごに
アイコンはラグビーボールにしました。ラグビーはパスを後ろに出すそうです。
理解が完全とは言えません。
- やっていることに意味がない
- 状況によって結果は変わる
などのつっこみがある場合はコメントお願いします。
Discussion