回答編集履歴
2
表現をわかりやすく変更
answer
CHANGED
@@ -74,7 +74,7 @@
|
|
74
74
|
|
75
75
|
- 多くの場合はフレームワークがスレッドプールの中からよしなに実行スレッドを選択します。
|
76
76
|
上記の例でも、`await`以降の処理がスレッド4に移されていることがわかります。
|
77
|
-
- 呼び出し元のスレッドが同期コンテキスト(≒メッセージループ)を持っており、かつ`await`時
|
77
|
+
- 呼び出し元のスレッドが同期コンテキスト(≒メッセージループ)を持っており、かつ`await`時に`ConfigureAwait(false)`を**設定していない**場合、呼び出し元スレッドで実行します。例えばWin32であればメッセージキューに`await`以降の処理を積み直すということをします。
|
78
78
|
この場合、例のように`.Wait()`すると、メッセージループをブロックしたまま後続メッセージを待機するという処理になってしまい、結果デッドロックを生じます。
|
79
79
|
|
80
80
|
GUIアプリケーションでは`await`以降の処理がUIスレッドで実行されるかワーカースレッドで実行されるかを常に意識するようにするとコードを理解しやすくなるのではと思います。
|
1
表記ゆれの校正
answer
CHANGED
@@ -70,7 +70,7 @@
|
|
70
70
|
|
71
71
|
----
|
72
72
|
|
73
|
-
さて、`await`以降の処理がFuture化され
|
73
|
+
さて、`await`以降の処理がFuture化され別スレッドで実行されると言いましたが、ここで使われるスレッドは実は条件次第で異なります。
|
74
74
|
|
75
75
|
- 多くの場合はフレームワークがスレッドプールの中からよしなに実行スレッドを選択します。
|
76
76
|
上記の例でも、`await`以降の処理がスレッド4に移されていることがわかります。
|