异步方法永远不会返回

thu*_*eys 5 c# deadlock task-parallel-library async-await windows-8

可能重复:
WinRT:使用GetFileFromApplicationUriAsync()加载静态数据

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

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

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

x.Load().Wait();
Run Code Online (Sandbox Code Playgroud)

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

Ste*_*ary 11

当您(同步)阻止异步代码时,会遇到死锁问题.

遵循以下最佳做法:

  1. 使用ConfigureAwait(false)尽可能库中的方法(例如,Load).
  2. 一直使用async; 不要阻止async代码.

在您的情况下,听起来Load可能被称为启动的一部分.这是异步做的有点棘手(因为构造函数可能不是async).但是,您应该能够通过使用异步延迟初始化来使其工作.