Сценарий (-ы) ниже 2, какой из них является правильным способом выполнения асинхронного программирования в C#?Async - Какая из них правильная
Сценарий-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». Просто используйте 'waitait.WhenAll (Tasks);'. Даже если ваши функции не являются асинхронными, «AsParallel» будет слишком поздно для вечеринки. – Luaan
@ Luaan, можете ли вы поделиться своими мыслями о «поздней вечеринке»? –
Вы не распараллеливаете что-либо, вызывая 'AsParallel' на перечисляемом и перечислив его. PLINQ может помочь вам только в том случае, если данные, которые вы производят, ленивы - в вашем случае вся работа уже выполнена (вызов 'AddSomethingAsync'). – Luaan