TransactionScope和多线程

时间:2009-03-23 14:15:29

标签: .net multithreading transactions

我想知道在处理多线程时如何以正确的方式使用TransactionScope类?

我们在主线程中创建了一个新的作用域,然后我们生成了几个工作线程,我们希望它们参与主作用域,以便例如如果作用域永远不会完成则对每个worker调用回滚

我在内部使用ThreadStaticAttribute阅读了有关TransactionScope的内容,这使得上述不可能/非常困难 - 有人可以验证这两种方式吗?如果我们以同步方式运行代码,那么回滚就会起作用,即内部事务能够参与主事务,但是如果我们切换到线程执行则不行。

由于

2 个答案:

答案 0 :(得分:29)

请参阅MSDN

  

您还应该使用TransactionScope和   DependentTransaction类   需要使用的应用程序   多个相同的交易   函数调用或多线程   调用

所以也许可以查看DependentTransaction - 特别是有一个工作线程示例here

答案 1 :(得分:18)

这是正确的:TransactionScope类使用Transaction.Current属性将其值存储在字段中,该字段标有ThreadStatic属性。

ThreadStatic属性确保字段值获得线程关联,即它在每个线程中具有唯一值。这是在线程中共享日期的推荐方法。它也被称为Thread Local Storage(TLS)。

TransactionScope类只定义当前线程中的事务上下文。但是,这并不意味着您的代码必须完成该线程中的所有工作。我可以想象一个使用多个线程的复杂计算算法。