Csharp/C#教程:将事务范围添加到Parallel.Foreach分享


将事务范围添加到Parallel.Foreach

我有一个循环将记录插入数据库(Firebird):

using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, options)) { taskList.Add(Task.Factory.StartNew(() => { Parallel.ForEach(objectList, c => { DoInsert(c, id); }); })); scope.Complete() } 

如果插入失败,我希望能够批量回滚这些插入。 但是,当我在Parallel.Foreach循环中执行插入时,事务范围不可见。 我假设那是因为循环在不同的线程中运行。 如果我使用TransactionScope作为串行插入执行此操作,一切正常。

我试图使用DependentTransaction但我似乎无法获取DoInsert函数的上下文。 DoInsert只是打开一个连接并将C的内容写入数据库。

有任何想法吗?

谢谢,

由于您提到的原因,您无法使用单个TransactionScope执行此操作:TransactionScope依赖于线程局存储,并且您处于multithreading环境中。

但更重要的是,要使其工作,每个工作线程都需要打开连接,在分布式事务中登记它,执行插入操作并关闭连接。

如果这是简单的插入,我会非常惊讶的是,创建所有这些连接将为您带来任何性能优势。 事实上,我相信如果你在单个线程上和单个连接上执行此程序会更快。 显然,这意味着连接打开(和关闭)一次,并作为参数传递给DoInsert方法。

更好的是,您可能希望查看批量插入。

上述就是C#学习教程:将事务范围添加到Parallel.Foreach分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ctvol.com/cdevelopment/943014.html

(0)
Shell脚本Shell脚本
上一篇 2021年11月13日
下一篇 2021年11月13日

精彩推荐