gpt4 book ai didi

c# - 并行线程中的多个 dbcontext,EntityException "Rerun your statement when there are fewer active users"

转载 作者:太空狗 更新时间:2023-10-29 18:35:51 26 4
gpt4 key购买 nike

我正在使用 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 资源。当事件用户较少时重新运行您的语句。请数据库管理员检查此实例的锁和内存配置,或检查长时间运行的事务。”

有谁知道造成这种情况的原因或如何预防这种情况?谢谢。

最佳答案

您还可以尝试使用 new ParallelOptions { MaxDegreeOfParallelism = 8 }Parallel.ForEach() 方法中设置并发任务的最大数量(将 8 替换为任意值你想限制它。

参见 MSDN了解更多详情

关于c# - 并行线程中的多个 dbcontext,EntityException "Rerun your statement when there are fewer active users",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14873042/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com