在异步查询中,查询运算符已经实现了惰性执行,但当使用 await
等待异步操作完成时,查询运算符仍然是同步执行,并且可能会阻塞主线程。因此,建议将异步查询嵌套在 Task.Run
方法中以支持多线程和惰性执行。
示例代码:
var result = await Task.Run(async () =>
{
var query = from item in collection.AsQueryable()
where await asyncMethod(item)
select item;
return await query.ToListAsync();
});
在上面的示例中,查询操作异步执行,并使用 ToListAsync
方法将结果转换为列表。同时,查询操作被包裹在 Task.Run
方法中以支持多线程和惰性执行。因此,在等待异步方法完成时,主线程可以自由地执行其他操作。