2012-09-12 39 views
4

可能重复:
WinRT: Loading static data with GetFileFromApplicationUriAsync()异步方法不会返回

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

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

这就是我所说的方法:

x.Load().Wait(); 

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

+0

在任务上询问“结果”。 '公共异步任务加载(){...}'。并在调用方法中。 'var result = x.Load()。Result; ' – DarthVader

+0

谢谢,但我没有返回任何东西 – thumbmunkeys

+1

看看这是否有帮助。 http://stackoverflow.com/questions/12235085/winrt-loading-static-data-with-getfilefromapplicationuriasync – DarthVader

回答

8

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

遵循以下最佳实践:

  1. 使用ConfigureAwait(false)尽可能在资料库中的方法(例如,Load)。
  2. 使用async一路向下;不要阻止async的代码。

就你而言,这听起来像Load可能被称为启动的一部分。这异步执行有点棘手(因为构造函数可能不是async)。但是,您应该可以通过使用asynchronous lazy initialization来使其工作。