TransactionScope和multithreading
我想知道在处理multithreading时如何以正确的方式使用TransactionScope类?
我们在主线程中创build一个新的范围,然后产生一对工作线程,我们希望这些线程参与主范围,例如,如果范围从未完成,那么每个工作者都会调用回滚。
我使用内部的ThreadStaticAttribute读取了一些有关TransactionScope的内容,这使得上述不可能/非常困难 – 有人可以validation任何一种方式吗? 如果我们以同步方式运行代码,则回滚工作,即内部事务能够参与主事务,但是如果我们切换到线程执行,则不能。
谢谢
请参阅MSDN :
对于需要跨多个函数调用或多个线程调用使用相同事务的应用程序,还应该使用TransactionScope和DependentTransaction类。
所以也许看看DependentTransaction
– 特别是在这里有一个工作线程的例子。
这是正确的: TransactionScope
类使用Transaction.Current
属性,它的值存储在用ThreadStatic
属性标记的字段中。
ThreadStatic
属性确保字段值获得线程关联,即它在每个线程中都有唯一的值。 这是在线程中分享date的推荐方法。 它也被称为线程本地存储 (TLS)。
TransactionScope
类只是在当前线程中定义一个事务上下文。 但是,这并不意味着你的代码必须完成该线程中的所有工作。 我可以想象一个复杂的计算algorithm,使用多个线程。