我想asynchronize我的原代碼運行一堆異步任務,當某一執行順序需要保留
for(var item in items)
{
dbAccess.Save(item);
}
的正常工作:
var tasks = new List<Task>();
for(var item in items)
{
tasks.Add(dbAccess.SaveAsync(item));
}
await Task.WhenAll(tasks);
不過,我需要補充的額外的清理調用之前我保存和項目到我的DB:
var tasks = new List<Task>();
for(var item in items)
{
tasks.Add(dbAccess.DeleteAsync(item.id));
tasks.Add(dbAccess.SaveAsync(item));
}
await Task.WhenAll(tasks);
上面這段代碼是因爲不正確另存直到相應的DeleteAsync完成後才能執行ync。換言之,刪除必須始終在每個項目的保存之前進行,但項目的順序無關緊要。
有沒有完美的方法來做到這一點?
如何先發出所有的刪除,等待它們,然後發出所有的保存,然後等待那些?否則,你應該將每個刪除+保存打包成一個任務。 –
好點Lasse,我爲了這個問題的目的簡化了我的代碼。我無法實現您的建議,因爲我沒有顯示更多信息。實際上,DeleteAsync會返回其他需要傳遞給SaveAsync的其他內容。 – AstroSharp
那麼?將它們打包成一個首先調用deleteasync的任務,然後再調用saveasync? –