了解TransactionScopeOptions:RequiresNew =抑制+必需?

Jax*_*ian 14 .net transactionscope

我相信我理解TransactionScopeOption.Suppress,TransactionScopeOption.Required但很难理解是什么TransactionScopeOption.RequiresNew.根据我读到的最后一个解释,以下两个代码块在功能上是否相同?这是什么RequiresNew意思的准确表示?

using (var ts1 = new TransactionScope(TransactionScopeOption.RequiresNew))
{
  DoStuff();
  ts1.Complete();
}
Run Code Online (Sandbox Code Playgroud)

using (var ts2 = new TransactionScope(TransactionScopeOptions.Suppress))
{
  using (var ts3 = new TransactionScope())
  {
    DoStuff();
    ts3.Complete();
  }

  ts2.Complete(); // not required but recommended for consistency's sake
}
Run Code Online (Sandbox Code Playgroud)

Edd*_*ddy 14

为了更好地理解事务范围,您可以阅读这篇msdn文章

我找不到一个很好的解释,除了创建的嵌套作用域的数量不同之外,这两者会有什么不同.无论事务是否已存在,这两种情况都应导致相同数量的交易.我找不到一个好的资源来引用,但我会总是去组合Suppress/Required的RequiresNew.RequiresNew基本上意味着:"无论是否已经存在或不存在交易给我一个新的交易".

更新: 如果第一个链接仍然断开,您可以在此处的wayback存档中找到它

  • 并且只是为了澄清...如果我回滚RequiresNew事务,这决不会影响父TransactionScope,同样,如果我回滚父TransactionScope,那不会影响RequiresNew事务?对不起,只是想确保我完全理解这些选项.如果我把这些混淆起来,会有很多潜在的令人讨厌的副作用(死锁,非原子操作等)! (2认同)
  • 博客条目的第一个链接已损坏. (2认同)