Verständnis TransactionScopeOptions: RequiresNew = Suppress + Erforderlich?
Ich glaube, ich verstehe TransactionScopeOption.Suppress
und TransactionScopeOption.Required
aber ich habe Schwierigkeiten zu verstehen, was TransactionScopeOption.RequiresNew
tut. Auf der Grundlage der letzten Erklärung, die ich gelesen habe, würden die folgenden beiden code-Blöcke funktional identisch sein? Dies ist eine genaue Darstellung dessen, was RequiresNew
bedeutet?
using (var ts1 = new TransactionScope(TransactionScopeOption.RequiresNew))
{
DoStuff();
ts1.Complete();
}
und
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
}
InformationsquelleAutor Jaxidian | 2011-08-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bekommen ein gutes Verständnis der Transaktion Bereiche können Sie Lesen, in diesem msdn-Artikel
Ich kann nicht finden, eine gute Erklärung, wie diese beiden wäre anders, außer, dass die Anzahl der geschachtelten Bereiche, die erstellt werden, sind unterschiedlich. Beide Fälle führen zu der gleichen Menge von Transaktionen, unabhängig davon, ob bereits eine Transaktion vorhanden ist oder nicht. Ich kann nicht finden, eine gute Ressource zu finden, aber ich würde immer gehen für RequiresNew über eine kombinierte Unterdrücken/Erforderlich. RequiresNew im Grunde bedeutet: "egal, ob es schon ist oder nicht, eine Transaktion, die mir einen neuen geben".
Update:
Falls der erste link bleibt gebrochen, Sie finden es in der wayback-Archiv hier
RequiresNew
: das enthaltene code hängt von einer Transaktion, sondern muss selbstständig ein commit oder Rollback.Suppress
: die enthaltenen code ausführt, seine eigene Entschädigung, so muss nicht Teil einer Transaktion." Das bedeutet (für mich) "Begehen" oder "Rollback" RequiresNew TransactionScope nicht manipuliert werden können oder abhängig von einer außerhalb der Transaktion weder das eine beeinflusst das andere. Das ist es, was das Unterdrücken der dies tun sollte, um seine inneren TransactionScope Benötigt.In aller Ehrlichkeit ich falsch verstanden, dein zweiter code-block und dachte, du hättest 2 geschachtelte transactionscopes() (ich habe die Unterdrücken, die auf das äußere). Ich werde Bearbeiten
Und nur um zu klären... Wenn ich ein rollback für die RequiresNew Transaktion, dass in keiner Weise beeinträchtigt ein Elternteil TransactionScope, und ebenso, wenn ich einen rollback einer übergeordneten TransactionScope, dass keinerlei Einfluss auf die RequiresNew Transaktion? Sorry, will nur sicher verstehe ich diese Optionen vollständig. Viele potenziell unangenehme Nebenwirkungen (wie Deadlocks, nicht-Atomare Operationen, etc) wenn ich diese gemischt!
Der erste link zu dem blog-Eintrag ist beschädigt.
InformationsquelleAutor Eddy