Подтвердить что ты не робот

Понимание TransactionScopeOptions: RequiresNew = Suppress + Required?

Я считаю, что понимаю TransactionScopeOption.Suppress и TransactionScopeOption.Required но мне трудно понять, что делает TransactionScopeOption.RequiresNew. На основании последнего объяснения, которое я прочитал, будут ли следующие два блока кода функционально одинаковыми? Является ли это точным представлением того, что RequiresNew означает?

using (var ts1 = new TransactionScope(TransactionScopeOption.RequiresNew))
{
  DoStuff();
  ts1.Complete();
}

а также

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

  ts2.Complete(); // not required but recommended for consistency sake
}
4b9b3361

Ответ 1

Чтобы получить хорошее представление о масштабах транзакций, вы можете прочитать эту статью msdn

Я не могу найти хорошее объяснение того, как эти два будут разными, за исключением того, что количество созданных вложенных областей различно. Оба случая должны приводить к одному и тому же количеству транзакций независимо от того, существует ли транзакция или нет. Я не могу найти хороший ресурс для ссылки, но я всегда буду искать RequiresNew над комбинированным Suppress/Required. RequiresNew в основном означает: "независимо от того, есть ли уже или нет транзакция, дайте мне новую".

Обновление: если первая ссылка не найдена, вы можете найти ее в обратном архиве здесь.