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

回答編集履歴

1

追記

2016/09/19 15:55

投稿

omanuke
omanuke

スコア109

answer CHANGED
@@ -2,4 +2,6 @@
2
2
  makeTaskListData内でawait rootFolder.GetFilesAsync();が非同期に処理され、それがUIスレッドのコンテキストに戻されるけれど、すでにUIスレッドは結果待ちで止まっているのでそこできれいにデッドロックしてるかと。
3
3
  kekyo2さんが[async-awaitダークサイドis何](http://www.kekyo.net/wp-content/uploads/2014/10/9c7f9f61fecff2c92be1e6eb2890d5ed.pptx)にまとめられていますのでご参考にされてみてはいかがでしょうか。
4
4
 
5
+ そちらにあるようにConfigureAwaitなどを使えばフリーズしないのではないかと思いますが、TaskをResultなどで待つことはそのスレッドを止めてしまうため基本的にはしない方がいいと思います。
6
+
5
7
  ちなみにそのような場合はコンストラクタは最低限のクラスの初期化だけすまして別にasyncのInitializeメソッドを設けそれを使って非同期の処理を呼び出すなども手かと思います。