异步 - 哪些是正确的

Hir*_*sai -1 .net c# c#-5.0

从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中等待调用,并且在上层阻止下一个循环执行时会受到影响.确认

Evk*_*Evk 6

场景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也不会做任何事情.