0
我有async
方法的問題。我的代碼如下所示:同步異步方法
var bid = await _applicationDataService.GetSnapshotFromServerAsync(b.BidId.ToString(), b.BidVersion);
if (bid != null)
{
if (await _bidManagerService.CheckIfBidExistsInLocalDbAsync(bid.BidId, bid.BidVersion))
{
await _bidManagerService.OverrideBidInLocalDbAsync(bid);
}
else
{
await _bidManagerService.SaveBidInLocalDbAsync(bid);
}
}
,並在項目中的不同的地方,我有:
await _bidContext.LoadBidByIdAsync(bidId.Value);
的問題是,該實體還不能在本地保存,但該方法將嘗試加載它。我必須以某種方式等待,直到第一個塊將完成下載和保存,然後我必須運行第二個塊。
我無法凍結主要威脅,因爲用戶界面無法響應。
,我發現這樣的事情:
這與'async'無關。如果您嘗試從* another *線程加載數據,則需要同步訪問權限。或者乾脆*不要*使用不同的線程。如果你的方法真的是異步的,他們將不會阻止用戶界面。您是否使用輪詢從另一個線程加載新的實體? –
是的,你需要某種'AsyncManualResetEvent'或者'AsyncAutoResetEvent'(使用第一個鏈接中的那個)。等待第二個程序段中的事件並在第一個程序段完成後設置信號。你完成了。 –
投票結束;最簡單的答案是在允許第二個塊運行之前,只是「等待」第一個塊。或者捕獲「任務」。或'AsyncLazy'。或者「SemaphoreSlim」。需要更多的上下文來確定哪些是最好的。 –