如何使用LINQ Select调用异步lamba表达式?

时间:2019-12-14 15:31:11

标签: c# lambda async-await

考虑以下代码...

List<myobject> items = dbItems.Select(x => ConvertDatabaseItem(x)).ToList();

private async Task<myobject> ConvertDatabaseItem(DataObjects.mydbobject x)
{
    var item = x.ToContract();
    await SetOtherInfo(item);
    return item;
}

这将无法编译,因为我们需要等待ConvertDatabaseItem ...

List<myobject> items = dbItems.Select(async x => await ConvertDatabaseItem(x)).ToList();

但是,这将无法正常工作,因为我们仍然需要等待异步lamda表达式,否则会产生编译器错误(List > to List )。

List<myobject> items = dbItems.Select(await (async x => await ConvertDatabaseItem(x))).ToList();

但是,这给出了“无法等待lamda表达式”。

我在这里错过了一些愚蠢的东西吗?还是不可能?

2 个答案:

答案 0 :(得分:4)

尝试使用Task.WhenAll方法。您的解决方案将如下所示:

var items = await Task.WhenAll(dbItems.Select(ConvertDatabaseItem));

答案 1 :(得分:0)

谢谢Didgeridoo ...我打完了以下电话...

List<myobject> items = (await Task.WhenAll(dbItems.Select(async x =>
{
    var item = x.ToContract();
    await SetOtherInfo(..., item);
    return item;
}))).ToList();