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