use*_*388 0 c# linq asynchronous
我试图循环结果集,运行查询以检索数据,然后将该数据添加到列表并返回它.
问题是,我试图异步这样做,我收到错误:
'System.Collections.Generic.List'不包含'ToListAsync'的定义,并且最好的扩展方法重载'System.Data.Entity.QueryableExtensions.ToListAsync(System.Linq.IQueryable)'有一些无效的参数
以下是该方法的代码:
public async Task<List<IHFData>> GetHFServiceData(string wtTransfereeId)
{
var hfDataList = new List<HFData>();
Parallel.ForEach(aauthorizationList, item =>
{
// code to retrieve data from database (truncated)
HFData hfData = Db.hfAuthorizations.AsNoTracking()....SingleOrDefault();
hfDataList.Add(hfData);
}
return await hfDataList.ToListAsync(); // errors on this line
}
Run Code Online (Sandbox Code Playgroud)
如何异步构建和返回我的列表?
正如错误消息告诉您的那样,没有方法List
可以异步创建列表.无论如何,你已经有了一个清单.
从多个线程添加项目到列表也是不安全的,就像你从并行的foreach循环中做的那样.
您也不应该首先对集合中的每个项目执行数据库查询.相反,您应该执行单个数据库查询,该查询根据您拥有的列表中的信息获取所需的所有项目.该查询应以调用结束ToListAsync
.
这里也没有必要的async
方法,你可以直接返回结果ToListAsync
.