2012-09-12 43 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來使其工作。