TransactionScopeOptions.Suppress 超时

问题描述 投票:0回答:2

在我刚刚接手的一个应用程序中发现了这一行,并没有多大意义。

using (new TransactionScope(TransactionScopeOption.Suppress, new TimeSpan(1,0,0))) {

这立即发生在 nservicebus 消息处理程序方法内并覆盖整个处理程序。

它似乎试图抑制环境事务并在一小时后中止。超时到期后会发生什么?我认为这只是选项的组合,并不意味着任何合理的事情。但这会导致什么结果呢?

c# transactions nservicebus
2个回答
1
投票

Suppress
表示不使用环境事务;并且实际上,范围内的操作不在事务中执行。这允许您在当前事务之外执行操作,而不受该事务的影响。例如:

using(var trans = new TransactionScope())
{
   // do operations within transaction
   using(var unscoped = new TransactionScope(TransactionScopeOption.Suppress))
   {
      // do "immediate" operations
   }
   // do operations within transaction
   // NOTE: No trans.Complete() called
}

// operations performed within "scoped" are not rolled back.

我不太确定超时是否真的有意义

Suppress


0
投票

来自 MSDN:

如果使用 Suppress 实例化作用域,则无论是否存在环境事务,它都不会参与事务。使用此值实例化的作用域始终将 null 作为其环境事务。

超时设置对

Suppress
没有影响。两者可以组合只是因为
TransactionScope
构造函数集是静态的,并且它不能阻止指定组合。

对于“嵌套”事务范围,指定超时可以减少(但不能增加)环境事务的超时。

相比之下,用

TransactionScope
实例化的
Suppress
永远不会加入任何环境事务,也不会形成新的事务,因此任何人的事务超时都不会受到影响。

© www.soinside.com 2019 - 2024. All rights reserved.