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

回答編集履歴

1

追記

2020/04/03 16:00

投稿

f-miyu
f-miyu

スコア1625

answer CHANGED
@@ -25,4 +25,26 @@
25
25
  catch
26
26
  {
27
27
  }
28
+ ```
29
+
30
+ ---
31
+ `dataOperator.GetAllSourceDataAsync(this.SourcePath).Result`は、現在のスレッドをブロックするので、`await StorageFolder.GetFolderFromPathAsync(sourcePath.Main)`の完了後に元のスレッドに戻ることができなくて、デッドロックが発生してしまいます。`ConfigureAwait(false)`で元のスレッドに戻らないようにするか、そもそも`Result`ではなく、`await`を使うようにするかのどちらかの対応を行う必要があります。
32
+
33
+ ```C#
34
+ public async Task<TargetFiles> GetAllSourceDataAsync(DirectoryPath sourcePath)
35
+ {
36
+ var folder = await StorageFolder.GetFolderFromPathAsync(sourcePath.Main).AsTask().ConfigureAwait(false);
37
+ var files = await folder.GetFilesAsync().AsTask().ConfigureAwait(false);
38
+
39
+ return new TargetFiles();
40
+
41
+ }
42
+ ```
43
+
44
+ ```C#
45
+ public async Task GetFileInfo()
46
+ {
47
+
48
+ var dataOperator = DependencyService.Get<IDataOperator>();
49
+ this.SourceAllData = await dataOperator.GetAllSourceDataAsync(this.SourcePath);
28
50
  ```