我正在使用带有EF-6的asp.net MVC-5,我不确定使用await + ToListAsync
是否有效。例如,我有以下存储库方法,它返回IQueryable: -
public IQueryable<TSet> getAllScanEmailTo()
{
return t.TSets.Where(a=>a.Name.StartsWith("ScanEmail"));
}
我称之为: -
var emailsTo = await repository.getAllScanEmailTo().ToListAsync();
一开始,我以为我会收到一个错误,因为我正在使用“等待”一种未被定义为任务的方法,但上述方法效果很好,所以有人可以就此提出建议吗?
答案 0 :(得分:17)
一开始我会因为我正在使用而收到错误 &#34;等待&#34;一种未定义为任务的方法,但上述方法有效 井
实际上,您正在等待返回Task<T>
的方法,其中T
是List<TSet>
。如果您查看扩展方法QueryableExtensions.ToListAsync
,您会看到它返回Task<List<TSource>>
。您异步等待此方法查询数据库,创建列表并将其返回给调用者。当你await
使用这种方法时,该方法将不会返回,直到操作完成。 async-await 使您的代码感觉同步,而执行实际上是异步的。
答案 1 :(得分:10)
答案 2 :(得分:2)
你不是在“等待一种方法”。您等待Task
,这是一个等待的。
您致电getAllScanEmailTo
,返回IQueryable<TSet>
,然后拨打ToListAsync
,然后返回您正在等待的Task<List<TSet>>
。