gpt4 book ai didi

c# - TransactionScope 如何与多线程一起工作

转载 作者:行者123 更新时间:2023-12-05 05:07:07 26 4
gpt4 key购买 nike

您好首先感谢您对这个问题的关注;有没有办法在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
}

最佳答案

请注意,分布式事务当前为 not supported在 .Net Core 上,仅在 .Net Framework 上。

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

步骤是:

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

还有一些注意事项:

  1. 在多个线程上使用 DependentTransaction 将立即需要使用 MSDTC。
  2. 在大型 DTC 事务下使用多个线程不会更快地插入到同一个表中(为此使用 SqlBulkCopy),并且您需要衡量并行插入到不同的表中是否表,DTC 事务下的同一数据库保证锁定开销或返回任何性能优势。
  3. 如果您使用async,那么您需要TransactionScopeAsyncFlowOption.Enabled

更多关于 Transction Scope here

关于c# - TransactionScope 如何与多线程一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59403689/

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