当前位置:  开发笔记 > 人工智能 > 正文

TransactionScope和多线程

如何解决《TransactionScope和多线程》经验,为你挑选了2个好方法。

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

我们在主线程中创建了一个新的作用域,然后我们生成了几个工作线程,并且我们希望它们参与主作用域,因此,例如,如果作用域永远不会完成,则会在每个作者上调用回滚.

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

谢谢



1> Marc Gravell..:

请参阅MSDN:

对于需要跨多个函数调用或多个线程调用使用相同事务的应用程序,还应使用TransactionScope和DependentTransaction类.

因此,也许考虑DependentTransaction-尤其是有工作线程例子,在这里.


.net 4.5.1使用TransactionScopeAsyncFlowOption.Enabled引入了更优雅的解决方案.在此处查看更多信息http://stackoverflow.com/a/17527759/43515
很遗憾,现在还没有找到博客

2> Michael Dama..:

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

ThreadStatic属性确保字段值获得线程关联,即它在每个线程中具有唯一值.它是共享最新推荐的方法的线程.它也称为线程本地存储(TLS).

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

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有