当前位置:  开发笔记 > 编程语言 > 正文

EF 6 - 如何正确执行并行查询

如何解决《EF6-如何正确执行并行查询》经验,为你挑选了1个好方法。



1> Peter Bons..:

问题是这样的:

EF不支持通过相同的DbContext对象处理多个请求.如果同一个DbContext实例上的第二个异步请求在第一个请求完成之前启动(这就是整点),那么您将收到一条错误消息,指出您的请求正在处理打开的DataReader.

资料来源:https://visualstudiomagazine.com/articles/2014/04/01/async-processing.aspx

您需要将代码修改为以下内容:

async Task> GetE1Data()
{
    using(var MyCtx = new MyCtx())
    {
         return await MyCtx.E1.Where(bla bla bla).ToListAsync();
    }
}

async Task> GetE2Data()
{
    using(var MyCtx = new MyCtx())
    {
         return await MyCtx.E2.Where(bla bla bla).ToListAsync();
    }
}

async Task DoSomething()
{
    var t1 = GetE1Data();
    var t2 = GetE2Data();
    await Task.WhenAll(t1,t2);
    DoSomething(t1.Result, t2.Result);
}


@Josh取决于。如果多个调用(比方说10个调用)比并行执行花费1秒钟的时间,则可以导致连续运行时的总持续时间短于10秒。但是数据库引擎也有其局限性。如果用并行请求轰炸它,则其资源消耗将增加。
推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有