c# - EF6 ToListAsync 不运行异步但阻塞线程

标签 c# entity-framework asynchronous async-await ef-database-first

为了提高我的页面性能,我想异步运行一些查询。
我升级到 EF6 是因为它通过公开异步方法原生支持此功能。
我无法让查询同时触发,所以我将我的代码归结为这个简单的例子:

var sw = new Stopwatch();
sw.Start(); 
var dummy = context.Set<CA_Event_Person>().Take(200).ToListAsync();
sw.Stop();
Logger.Debug("attempt nr 1 : " + sw.ElapsedMilliseconds);
var result = await dummy;

我的异常(exception)是秒表立即停止,因为我稍后会等待。
然而,我的记录器说秒表上已经过了 5000 毫秒,这意味着调用是同步执行的而不是异步执行的。

任何人都知道我为什么做错了或者我做错了什么?

最佳答案

Anyone got some insight in the why or what I could be doing wrong?

这是应用程序中对 EF 的第一次调用吗?您能否为 EF 模型的内部表示的一次性构建计时?

对于更复杂的 EF 模型,第一次调用的开销很大。但这是一次性的(每个应用域)成本。

最好为多个调用计时(然后丢弃最短和最长的时间)。

关于c# - EF6 ToListAsync 不运行异步但阻塞线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31287942/

相关文章:

javascript - JS 和 .NET 夏令时行为之间的差异

java - 在 Java 8 中模仿 C# 操作

c# - 我可以更改后编译器的顺序吗?

c# - 用于过滤记录的 Entity Framework Linq 查询

javascript - 异步代码执行

c# - 这是错误使用泛型的例子吗?

c# - Entity Framework 如何仅更新模型中的特定字段?

c# - 使用 Entity Framework 的具有多对多关系的 Linq 查询

mysql - Slick 中的线程安全

javascript - 暂停执行代码,直到异步函数返回所需的值