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 回答