從以下2個場景中,哪一個是在c#中進行異步編程的正確方法?異步 - 其中哪些是正確的
方案-1
public async Task<T1> AddSomethingAsync(param)
{
return await SomeOtherFunctionFromThirdPartyLibraryForIOAsync(param);
}
然後
List<Task> Tasks=new List<Task>();
foreach(var task in FromAllTasks())
{
Tasks.Add(AddSomethingAsync(task));
}
await Task.WhenAll(Tasks.AsParallel());
方案-2
public async Task<T1> AddSomethingAsync(param)
{
return SomeOtherFunctionFromThirdPartyLibraryForIOAsync(param);
}
然後
List<Task> Tasks=new List<Task>();
foreach(var task in FromAllTasks())
{
Tasks.Add(SomeOtherFunctionFromThirdPartyLibraryForIOAsync(task));
}
await Task.WhenAll(Tasks.AsParallel());
2的唯一區別是,後面沒有await
關鍵字在AddSomethingAsync
函數中。
所以這裏是更新 - 我想知道要實現的是,所有任務應該並行和異步執行。 (我的想法是在場景-1,呼叫將內部AddSomethingAsync被期待已久的,並將在上層傷害阻止下一個循環執行。確認
'Tasks.AsParallel'?我不認爲你知道'AsParallel'是什麼。只需使用'await Task.WhenAll(Tasks);'。即使你的函數不是真正的異步,「AsParallel」對於聚會來說也太晚了。 – Luaan
@Luaan,你能分享一些關於「派對遲到」的更多想法嗎? –
你不通過在枚舉上枚舉並調用'AsParallel'來並行化任何東西。 PLINQ永遠只能幫助你,如果你生產的數據是懶 - 你的情況,所有的工作已經完成,已經(調用'AddSomethingAsync')。 – Luaan