从以下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