异步返回对象列表

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)

如何异步构建和返回我的列表?

Ser*_*rvy 5

正如错误消息告诉您的那样,没有方法List可以异步创建列表.无论如何,你已经有了一个清单.

从多个线程添加项目到列表也是不安全的,就像你从并行的foreach循环中做的那样.

您也不应该首先对集合中的每个项目执行数据库查询.相反,您应该执行单个数据库查询,该查询根据您拥有的列表中的信息获取所需的所有项目.该查询应以调用结束ToListAsync.

这里也没有必要的async方法,你可以直接返回结果ToListAsync.