TransactionScope如何与多线程一起使用

问题描述 投票:1回答:1

嗨,首先感谢您对这个问题的关注;有什么办法可以在c#

中实现这样的事务
using (Transactionscope x=new Transactionscope ())
{

   Thead A()=> Independent Transactionscope()  A(Insert into table X )

   Thead B()=> Independent Transactionscope()  B(Insert into table Y )

   Thead C()=> Independent Transactionscope()  C(Insert into table Z )

   Thread.WaitAll(A,B,C)

  commit big transaction x/ rollback big transaction x
}
c# transactionscope
1个回答
0
投票
请注意,分布式事务当前仅在.Net Framework上not supported

为了使用TransactionScope跨越多个线程,您需要使用DependentClone将线程绑定到父级TransactionScope

步骤是:

    在主线程/第一个线程上启动TransactionScope
  1. 仅在创建每个线程之前,使用DependentClone创建一个DependentTransaction,然后将此DependentTransaction实例传递给新线程。
  2. 在子线程上,可以使用TransactionScope(DependentTransaction)构造函数重载来创建链接的TransactionScope,子线程可以在其中执行本地事务。
  3. 随着每个子线程上的工作成功完成,然后提交线程TransactionScopeDependentTransaction
  4. 在主线程上,等待所有线程完成,然后提交根目录TransactionScope
  • 也有一些警告:

      在多个线程上使用DependentTransaction将立即需要使用MSDTC。
  • 在大型DTC事务下使用多个线程不会使插入到同一表中的速度更快(为此使用SqlBulkCopy),您需要测量是否并行插入到不同的表中,同一数据库下的相同数据库中。 DTC交易可保证锁定开销或返回任何性能收益。
  • 如果使用async,则需要TransactionScopeAsyncFlowOption.Enabled
  • [C0的更多信息
  • © www.soinside.com 2019 - 2024. All rights reserved.