异步方法永远不会返回

时间:2012-09-12 16:24:17

标签: c# windows-8 task-parallel-library deadlock async-await

  

可能重复:
  WinRT: Loading static data with GetFileFromApplicationUriAsync()

我的应用程序中的以下代码被调用,但它永远不会返回,或者抛出异常:

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

这就是我调用方法的方法:

x.Load().Wait();

为什么等待的方法GetFileFromApplicationUriAsync()永远不会返回?

1 个答案:

答案 0 :(得分:11)

当您(同步)阻止异步代码时,您run into a deadlock problem

遵循以下最佳做法:

  1. 尽可能在您的图书馆方法中使用ConfigureAwait(false)(例如Load)。
  2. 一直使用async;不要阻止async代码。
  3. 在您的情况下,听起来Load可能会被称为启动的一部分。这是异步做的有点棘手(因为构造函数可能不是async)。但是,您应该可以使用asynchronous lazy initialization来使其工作。