我最近从实体框架切换到了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是正确的,但它在运行时挂起。
希望我提供了足够的代码来证明这个问题。
答案 0 :(得分:2)
您需要await Task.WhenAll(list2)
。
Task.WhenAll()
收集任务集合并返回结果集合的任务。