我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“底层提供程序在打开时失败”,其内部细节如下:
“SQL Server 数据库引擎的实例此时无法获取LOCK资源。当活动用户较少时重新运行您的语句。请数据库管理员检查此实例的锁和内存配置,或检查是否长时间运行交易。”
有谁知道是什么原因造成的或如何预防?谢谢。