Creo que entiendo TransactionScopeOption.Suppress
y TransactionScopeOption.Required
pero estoy teniendo dificultades para entender lo que hace TransactionScopeOption.RequiresNew
. Basado en la última explicación que leí, ¿los dos bloques de código siguientes serían funcionalmente iguales? ¿Es esta una representación fiel de lo que significa RequiresNew
?Descripción de TransactionScopeOptions: RequiresNew = Suprimir + ¿Obligatorio?
using (var ts1 = new TransactionScope(TransactionScopeOption.RequiresNew))
{
DoStuff();
ts1.Complete();
}
y
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
}
ya lo hizo, eso es lo que me dio esa impresión. Citas: "' RequiresNew': el código contenido depende de una transacción, pero se debe comprometer o revertir de forma independiente. "Suprimir": el código contenido realiza su propia compensación, por lo que no debe formar parte de una transacción. " Esto significa (para mí) "comprometer" o "revertir" un RequiresNew TransactionScope no puede ser manipulado o dependiente de una transacción externa - ninguno afecta al otro. Eso es lo que debe hacer Suppress en su interior TransactionScope obligatorio. – Jaxidian
Honestamente leí tu segundo bloque de código y pensé que tenías 2 workscopes anidados() (me perdí el Suppress en el externo). Editaré – Eddy
Y solo para aclarar ... Si retrotrajo la transacción RequiresNew, eso de ninguna manera afecta a un TransactionScope padre, y del mismo modo, si restituyo un TransactionScope padre, eso de ninguna manera afecta la transacción RequiresNew? Lo siento, solo quiero asegurarme de que entiendo estas opciones por completo. ¡Muchos efectos secundarios potencialmente desagradables (punto muerto, operaciones no atómicas, etc.) si los mezclo! – Jaxidian