我正在使用Parallel.ForEach
在多个线程上进行工作,每次迭代都使用一个新的EF5 DbContext,并将其全部包装在TransactionScope中,如下所示:
using (var transaction = new TransactionScope())
{
int[] supplierIds;
using (var appContext = new AppContext())
{
supplierIds = appContext.Suppliers.Select(s => s.Id).ToArray();
}
Parallel.ForEach(
supplierIds,
supplierId =>
{
using (var appContext = new AppContext())
{
Do some work...
appContext.SaveChanges();
}
});
transaction.Complete();
}
运行几分钟后,它会抛出一个EntityException异常,错误信息为"The underlying provider failed on Open",并包含以下详细信息:
"SQL Server数据库引擎实例此时无法获取LOCK资源。当活跃用户较少时,请重新运行您的语句。请询问数据库管理员检查该实例的锁定和内存配置,或检查是否存在长时间运行的事务。"
有人知道是什么原因导致这个问题,或者如何避免这个问题吗?谢谢。