关于类型的异步问题
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 接受一组结果的任务。
我最近从 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 接受一组结果的任务。