C# EF6 ToListSync不运行异步,但会阻止线程

C# EF6 ToListSync不运行异步,但会阻止线程,c#,entity-framework,asynchronous,async-await,ef-database-first,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.ElapsedMillise

为了提高页面性能,我想异步运行一些查询。
我升级到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;
var sw=新秒表();
sw.Start();
var dummy=context.Set().Take(200).ToListAsync();
sw.Stop();
Logger.Debug(“尝试次数1:+sw.elapsedmillyses”);
var结果=等待伪值;
我的例外是,秒表立即停止,因为我正在等待在稍后的时间点
然而,我的记录器显示秒表已经过了5000毫秒,这意味着调用是同步执行的,而不是异步执行的。

有人知道我为什么会做错什么吗

有人知道我为什么会做错什么吗

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

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


最好是给一些电话计时(然后扔掉最短和最长的时间)。

我也发现了这个建议,但这不是我请求的第一个电话。此外,根据我的通话时间大小,持续时间会增加或减少。我也有一个计时器来计时我的等待线路,这个计时器的持续时间大约为1ms。如果在上下文中使用
DbSet
属性,会得到同样的结果吗?(如果不(短时间)重新创建,将会有很多猜测。)只需尝试DBSet属性,它就会给出相同的结果。我将尝试创建一个小项目来模拟这个问题,但没有一个公共sql server可能会使思考变得困难:)创建我的演示项目时,您似乎知道答案所在,上下文生成是查询中最重要的部分。这不是第一个数据库调用,但它是该上下文上的第一个数据库调用(我有多个)。在第一个ToListSync之后,下一个任务将在1毫秒内生成。我做了一些进一步的研究,很明显,异步方法只会在第一个WAIT语句之后作为任务返回(这有点奇怪,但确实解释了这种行为)。EF后面有什么数据库?例如,因为SQL压缩位不支持异步,所以会阻塞。我使用的是SQL server 2008