从2个以下的场景中,哪一个是在c#中进行异步编程的正确方法?
情景1
public async Task<T1> AddSomethingAsync(param)
{
return await SomeOtherFunctionFromThirdPartyLibraryForIOAsync(param);
}
Run Code Online (Sandbox Code Playgroud)
然后
List<Task> Tasks=new List<Task>();
foreach(var task in FromAllTasks())
{
Tasks.Add(AddSomethingAsync(task));
}
await Task.WhenAll(Tasks.AsParallel());
Run Code Online (Sandbox Code Playgroud)
方案2
public async Task<T1> AddSomethingAsync(param)
{
return SomeOtherFunctionFromThirdPartyLibraryForIOAsync(param);
}
Run Code Online (Sandbox Code Playgroud)
然后
List<Task> Tasks=new List<Task>();
foreach(var task in FromAllTasks())
{
Tasks.Add(SomeOtherFunctionFromThirdPartyLibraryForIOAsync(task));
}
await Task.WhenAll(Tasks.AsParallel());
Run Code Online (Sandbox Code Playgroud)
2之间唯一的区别是,后来没有await关键字里面的AddSomethingAsync功能.
所以这里是更新 - 我想要知道的是,所有任务应该并行和异步执行.(我的想法是在方案-1中,将在AddSomethingAsync中等待调用,并且在上层阻止下一个循环执行时会受到影响.确认
场景3
public Task<T1> AddSomethingAsync(param)
{
return SomeOtherFunctionFromThirdPartyLibraryForIOAsync(param);
}
Run Code Online (Sandbox Code Playgroud)
然后
List<Task> Tasks=new List<Task>();
foreach(var task in FromAllTasks())
{
Tasks.Add(SomeOtherFunctionFromThirdPartyLibraryForIOAsync(task));
}
await Task.WhenAll(Tasks);
Run Code Online (Sandbox Code Playgroud)
如果您没有等待任何事情 - 您不需要async关键字.在这种情况下,执行AsParallel也不会做任何事情.