并行多线程异步EF调用是否安全?

时间:2016-12-12 10:12:11

标签: c# multithreading entity-framework asynchronous

我试图研究这个话题,但我在这里看到的大多数问题/答案与我认为是真实的或者在他们的回答中相互矛盾 - 可能是因为他们已经有几年了。

如果我有一个多线程environemnt(两个用例:ASP.NET和其他一些Windows服务)。如果我同时运行两个EF6异步调用但是使用单独的UnitOfWork / DbContext会抛出吗?在实践中它似乎永远不会出现,但这与之前的答案相反?

以前我曾想过,只要DbContext没有共享,那么任何锁定都是数据库的特权。因此,只有在表/查询被阻止时才会阻止。

即。让我们假设这两个调用都在同一时间发生。会发生什么?

// Request 1
using (var uow = new UnitOfWork())
{
  var list = await uow.GetMeSomething().ToListAsync();
}

// Request 2
using (var uow = new UnitOfWork())
{
  var list = await uow.GetMeSomething().ToListAsync();
}

1 个答案:

答案 0 :(得分:1)

是的,没关系。您可以有两个(或任意数量)同时请求,只要它们使用不同的DbContext s。

但是,执行并发数据库请求可能对您没有多大帮助。特别是,如果两个请求都是相同的旋转生锈型驱动器,那么如果有的话,我不会期望提高速度。