关于类型的异步问题

Async issue regarding types

我最近从 Entity Framework 切换到 Dapper。到目前为止,我对结果非常满意;但是,我遇到了一个异步问题,虽然我很难解决。

例子如下:

var list1 = await _db.getList(...);   // async Task<Element> getList(...)
var list2 = v_list1.select( async item => {

  var flag = await _db.getFlagValue(...); // async Task<bool> getFlagValue(...)
  item.flag = flag;
  return item;

});

因为 'item' 之前的 "async" typeof list2 是 IEnumerable<Task<Element>> 而不是 IEnumerable<Element>

如果我将 getFlagValue 更改为同步而不是异步并更改代码,那么它就可以正常工作。

我尝试添加一个额外的

.Select( async r => await r );

到最后,但没有用。虽然 list2 的 typeof 是正确的,但它在运行时挂起。

希望我提供了足够的代码来说明问题。

你需要 await Task.WhenAll(list2).

Task.WhenAll() 接受一组任务,returns 接受一组结果的任务。