回答編集履歴
1
内容の補足
answer
CHANGED
@@ -126,5 +126,17 @@
|
|
126
126
|
}
|
127
127
|
}
|
128
128
|
}
|
129
|
+
```
|
130
|
+
追記)
|
131
|
+
SynchronizationContextによっては、実行スレッドによりawait後のスレッドに制約がかかるため、Task.Waitと競合してデッドロックすることがあります。
|
132
|
+
コンソールアプリ以外で使用するケースでは、そのようなケースが起こりうるので、ご注意ください。
|
133
|
+
例えば、これ100msくらいで終わるからUIスレッドで実行しよう、とかすると、100ms経過しても返ってこず、固まるということです。確実にUIスレッド以外から実施してください。ASP.NETでの回避方法は未確認です。
|
134
|
+
ConfigureAwaitによる回避は↓の記事にもある通りやめるべきだと思います。
|
129
135
|
|
130
|
-
|
136
|
+
デッドロックについては、↓が詳しいです。
|
137
|
+
http://blog.stephencleary.com/2012/07/dont-block-on-async-code.html
|
138
|
+
|
139
|
+
SynchronizationContextについては、↓参照です。
|
140
|
+
https://msdn.microsoft.com/magazine/gg598924.aspx
|
141
|
+
|
142
|
+
最後に、納得の行かない人もいるかもしれないので、書いておきますが、待ち合わせという性格上、このI/Fをawaitで実装する限り、Task.Waitは仕方のない選択です。有効なケースであれば問題はないので、個人的に分かって使う分には益がある、と考えています。
|