usr*_*usr 51 .net entity-framework entity-framework-6
当我们启动多个异步实体框架查询并并行运行时会发生什么?
他们是否并行执行?它们是否由实体框架序列化?这不受支持吗?它会导致异常吗?
public async Task QueryDatabase()
{
using (var context = new MyDbContext())
{
Task task1 = context.SomeTable1.ToListAsync();
Task task2 = context.SomeTable2.ToListAsync();
await Task.WhenAll(task1, task2);
}
}
Run Code Online (Sandbox Code Playgroud)
ken*_*n2k 62
这应该抛出DbConcurrencyException异常说法
在先前的异步操作完成之前,在该上下文上开始第二操作.使用'await'确保在此上下文上调用另一个方法之前已完成任何异步操作.任何实例成员都不保证是线程安全的.
EF将检测开发人员是否尝试同时执行两个异步操作并抛出.
启用数据库操作的异步执行实际上与在同一上下文中启用并发执行是正交的.在服务器方案的特定情况下,使用并发访问会对可伸缩性产生负面影响,因为这意味着为了处理单个请求,您将旋转任意数量的不同线程.所有线程都会争夺内存等资源与服务其他并发请求所需的其他线程.
请注意,正如 ken2k 所提到的,当将实体框架与 MS SQL Server 一起使用时,这是不允许的。但是,如果您将 Entity Framework 与 Oracle 一起使用,则这是允许的。
| 归档时间: |
|
| 查看次数: |
14377 次 |
| 最近记录: |