是平行的多线程异步EF调用安全的



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

如果我有一个多螺纹环境(两个用例:ASP.NET和其他Windows Service)。如果我同时运行两个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();
}

是的,很好。只要使用不同的 DbContexts。

,您就可以同时有两个(或任意数量的)请求

执行并发数据库请求可能不会给您带来太大的收益。特别是,如果两个请求都达到了相同的旋转锈式驱动器,那么我不会期望提高速度太多,如果有的话。

最新更新