我想知道在处理多线程时如何以正确的方式使用TransactionScope类?
我们在主线程中创建了一个新的作用域,然后我们生成了几个工作线程,我们希望它们参与主作用域,以便例如如果作用域永远不会完成则对每个worker调用回滚
我在内部使用ThreadStaticAttribute阅读了有关TransactionScope的内容,这使得上述不可能/非常困难 - 有人可以验证这两种方式吗?如果我们以同步方式运行代码,那么回滚就会起作用,即内部事务能够参与主事务,但是如果我们切换到线程执行则不行。
由于
答案 0 :(得分:29)
请参阅MSDN:
您还应该使用TransactionScope和 DependentTransaction类 需要使用的应用程序 多个相同的交易 函数调用或多线程 调用
所以也许可以查看DependentTransaction
- 特别是有一个工作线程示例here。
答案 1 :(得分:18)
这是正确的:TransactionScope
类使用Transaction.Current
属性将其值存储在字段中,该字段标有ThreadStatic
属性。
ThreadStatic
属性确保字段值获得线程关联,即它在每个线程中具有唯一值。这是在线程中共享日期的推荐方法。它也被称为Thread Local Storage(TLS)。
TransactionScope
类只定义当前线程中的事务上下文。但是,这并不意味着您的代码必须完成该线程中的所有工作。我可以想象一个使用多个线程的复杂计算算法。