【发布时间】:2019-04-24 08:35:23
【问题描述】:
接口IQueryable 和IQueryable<T> 是异步的吗?
我的意思是,假设以下代码:
void Method()
{
var customers = CustomerReposity.ToQueryable(); //The execution of query starts here.
DoSomething();
foreach (var customer in customers) // The foreach await to finish
customer.DoSomething();
}
我的猜测对吗?如果不是,实现异步行为的正确形式是什么?
也许……
async void Method()
{
var customers = CustomerReposity.ToQueryable().ToListAsync(); //The execution of query starts here.
DoSomething();
foreach (var customer in await customers) // The foreach await to finish
customer.DoSomething();
}
这是个好主意吗?
【问题讨论】:
-
这个问题好像是:什么时候使用异步方法?
-
@TânNguyễn 不,我知道什么时候使用异步,问题是 IQueryable 接口是否默认是异步的。
-
IQueryable与async无关。ToListAsync只是使用异步任务将项目转换为列表的扩展方法(需要await)。 -
除了Tan的回复,
IQueryable更像,你需要的时候我给你,或者延迟加载。我什至不会打扰您的第一个代码块async-ing。 -
@TânNguyễn 当我调用
IQueryable.ToListAsync()时开始执行查询?因为在我使用 foreach 之前查询是并行运行的,所以在 foreach 上等待它是一个好主意吗?DoSomething()方法可以长时间运行。
标签: c# linq iqueryable