如果我在IQueryable上使用等待+ ToListAsync()并且未定义为任务,那么它是否正确

我正在使用带有EF-6的asp.net MVC-5,我不确定使用await + ToListAsync是否有效。 例如,我有以下存储库方法,它返回IQueryable: –

 public IQueryable getAllScanEmailTo() { return t.TSets.Where(a=>a.Name.StartsWith("ScanEmail")); } 

我称之为: –

 var emailsTo = await repository.getAllScanEmailTo().ToListAsync(); 

一开始,我以为我会得到一个错误,因为我正在使用“等待”一个未被定义为任务的方法,但上面工作得很好,所以有人可以就此提出建议吗?

在开始我虽然我会得到一个错误,因为我使用“等待”一个没有被定义为任务的方法,但上面工作得很好

实际上, 您正在等待返回Task ,其中TList 。 如果查看扩展方法QueryableExtensions.ToListAsync ,您将看到它返回一个Task> 。 您异步等待此方法查询数据库,创建列表并将其返回给调用者。 当您await这样的方法时,该方法将不会返回,直到操作完成。 async-await使您的代码感觉同步,而执行实际上是异步的。

实际上没有问题,因为你正在唤醒ToListAsync()而不是getAllScanEmailTo()

编辑:要查看async-await模式是如何工作的,您可以看到此链接 。 这是一张有用的图片

在此处输入图像描述

你不是在“等待一种方法”。 你正在等待Task ,这是一个等待的。

您调用getAllScanEmailTo返回一个IQueryable ,然后在其上调用ToListAsync ,它返回您正在等待的Task>