实体框架是否支持并行异步查询?

实体框架是否支持并行异步查询?

当我们启动多个异步实体框架查询并并行运行时会发生什么

他们是否并行执行? 实体框架是否被序列化? 这不受支持吗? 是否导致异常?

public async Task QueryDatabase()
{
    using (var context = new MyDbContext())
    {
        Task task1 = context.SomeTable1.ToListAsync();
        Task task2 = context.SomeTable2.ToListAsync();

        await Task.WhenAll(task1, task2);
    }
}
采纳答案:

根据版本6的规格不支持此功能。

这应该抛出一个DbConcurrencyException异常

在之前的异步操作完成之前,在此上下文中开始第二个操作。 在调用此上下文之前的另一个方法时,使用'等待'来确保任何异步操作已经完成。 任何实例成员都不能保证线程安全。

EF将检测开发人员是否一次尝试执行两个异步操作并抛出

从项目的codeplex页面 :

实现数据库操作的异步执行实际上与在同一上下文中启用并发执行正交。 在服务器场景的特定情况下,使用并发访问可能会对可伸缩性产生负面影响,因为这意味着为了处理单个请求,您将会旋转任意数量的不同线程。 所有线程将竞争资源,如内存与服务器其他并发请求所需的其他线程。

参考更多解答:实体框架是否支持并行异步查询?,转载请保留实体框架是否支持并行异步查询?

更多:entity-framework