5

重複の可能性:
WinRT: GetFileFromApplicationUriAsync() を使用した静的データの読み込み

アプリケーションで次のコードが呼び出されますが、何も返されないか、例外がスローされます。

public async Task Load()
{
    ...
    StorageFile file = 
      await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///" + name));
    ...
}

これは私がメソッドを呼び出す方法です:

x.Load().Wait();

GetFileFromApplicationUriAsync()待機中のメソッドが返されないのはなぜですか?

4

1 に答える 1

12

非同期コードを (同期的に) ブロックすると、デッドロックの問題が発生します

次のベスト プラクティスに従ってください。

  1. ConfigureAwait(false)ライブラリ メソッドで可能な限り使用します (例: Load)。
  2. 一番下まで使用asyncしてください。asyncコードをブロックしないでください。

あなたの場合、Loadスタートアップの一部として呼び出される可能性があるようです。これを非同期で行うには少し注意が必要です (コンストラクターは ではない可能性があるためasync)。ただし、非同期遅延初期化を利用することで動作させることができるはずです。

于 2012-09-12T21:48:28.410 に答える