2015-06-16 59 views
3

我在我的應用程序中的非GUI線程中運行下面的方法:實體框架6/SQL Server CE的4 SaveChangesAsync()

private async Task PerformContextSubmitAsync() 
{ 
    try 
    { 
     await DataContextProvider.GetDefaultContext().SaveChangesAsync(); 
    } 
    catch (Exception ex) 
    { 
     Log.Error("Error performing context submit", ex); 
    } 
} 

被稱爲像這樣:

await PerformContextSubmitAsync(); 

該應用程序是一個基於WPF/Prism的應用程序,因此我還發布了更新GUI中的進度條和文件數的事件,例如:

_eventAggregator.GetEvent<DatabaseProgressEvent>().Publish(new DatabaseProgress(percentDone)); 

一切都按預期工作接受我仍然在UI更新中看到一個「組塊」效果,與SaveChangesAsync()的調用一致。

基本上這仍然阻塞正在執行的線程。這是SQL Server CE的限制嗎?還是我在做一些非常愚蠢的事情?

我可以找到寶貴的一點關於這個谷歌搜索和沒有什麼。

回答

0

經過一些更多的測試,似乎我不應該在撥打async方法時使用await關鍵字。

執行這樣的電話:

Task.Run(() => PerformContextSubmitAsync()); 

不會阻止原始調用線程,但它似乎並沒有真正以異步方式執行。這看起來更像是將執行推遲到未來的某個時間點。