47

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

我们在主线程中创建了一个新范围,然后生成了几个工作线程,我们希望它们参与主范围,例如,如果范围从未完成,则在每个工作线程上调用回滚。

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

4

2 回答 2

34

MSDN

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

所以也许看看DependentTransaction- 特别是,这里有一个工作线程示例

于 2009-03-23T14:36:02.983 回答
19

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

ThreadStatic属性确保字段值获得线程亲和性,即它在每个线程中具有唯一值。这是在线程共享数据的推荐方法。它也称为线程本地存储(TLS)。

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

于 2009-03-23T16:25:15.607 回答