質問するログイン新規登録

回答編集履歴

1

内容の補足

2019/02/13 04:44

投稿

wwbQzhMkhhgEmhU
wwbQzhMkhhgEmhU

スコア343

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は仕方のない選択です。有効なケースであれば問題はないので、個人的に分かって使う分には益がある、と考えています。