C# 集合初始值设定项的异步填充

C# 集合初始值设定项的异步填充,c#,asynchronous,async-await,collection-initializer,C#,Asynchronous,Async Await,Collection Initializer,我想使用将调用异步方法的集合初始值设定项填充集合: public class Diagnostics { public async Task<IEnumerable<DiagnosticsInfo>> Get() => new List<DiagnosticsInfo> { await GetDiagnosticsInfo1(), await GetDiagnosticsInfo2(

我想使用将调用异步方法的集合初始值设定项填充集合:

public class Diagnostics
{
    public async Task<IEnumerable<DiagnosticsInfo>> Get() => new List<DiagnosticsInfo>
    {            
        await GetDiagnosticsInfo1(),
        await GetDiagnosticsInfo2(),
        await GetDiagnosticsInfo3()
    };
}
我的直觉正确吗

你的直觉是对的。集合初始值设定项所做的就是调用集合的
Add
方法。这意味着您的代码被转换为:

public async Task<IEnumerable<DiagnosticsInfo>> Get()
{
    var list = new List<DiagnosticsInfo>();         
    list.Add(await GetDiagnosticsInfo1());
    list.Add(await GetDiagnosticsInfo2());
    list.Add(await GetDiagnosticsInfo3());
    return list;
}

我的直觉正确吗?是的<代码>返回等待任务。WhenAll()-nice我认为删除返回就足够了。@M.kazemAkhgary什么意思?
返回等待不起作用。编译时错误。无法将void转换为集合。泛型无效blah@M.kazemAkhgary只有当
GetDiagnosticsInfo
的返回值是
任务时,它才会是
void
,而不是。这是一项
任务
public async Task<IEnumerable<DiagnosticsInfo>> Get()
{
    var list = new List<DiagnosticsInfo>();         
    list.Add(await GetDiagnosticsInfo1());
    list.Add(await GetDiagnosticsInfo2());
    list.Add(await GetDiagnosticsInfo3());
    return list;
}
public async Task<IEnumerable<DiagnosticsInfo>> Get()
{
    var task1 = GetDiagnosticsInfo1();
    var task2 = GetDiagnosticsInfo2();
    var task3 = GetDiagnosticsInfo3();

    return await Task.WhenAll(task1, task2, task3);
}