有关类型的异步问题

时间:2018-01-25 23:33:18

标签: c# sql asynchronous dapper

我最近从实体框架切换到了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;

});

因为&#34; async&#34;之前&#39; item&#39; typeof list2是IEnumerable<Task<Element>>而不是IEnumerable<Element>

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

我尝试添加额外的

.Select( async r => await r );
到最后但它没有用。虽然list2的typeof是正确的,但它在运行时挂起。

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

1 个答案:

答案 0 :(得分:2)

您需要await Task.WhenAll(list2)

Task.WhenAll()收集任务集合并返回结果集合的任务。