为了提高我的页面性能,我想异步运行一些查询。
我升级到 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/