Uważam, że rozumiem TransactionScopeOption.Suppress
i TransactionScopeOption.Required
, ale mam trudności ze zrozumieniem, co robi TransactionScopeOption.RequiresNew
. W oparciu o ostatnie wyjaśnienie, które przeczytałem, czy następujące dwa bloki kodu funkcjonalnie będą takie same? Czy to jest dokładna reprezentacja tego, co oznacza RequiresNew
?Understanding TransactionScopeOptions: RequewNew = Suppress + Required?
using (var ts1 = new TransactionScope(TransactionScopeOption.RequiresNew))
{
DoStuff();
ts1.Complete();
}
i
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
}
już to zrobił, to co dał mi to wrażenie. Cytaty: "' RequewNew': zamknięty kod zależy od transakcji, ale musi być niezależnie zatwierdzony lub wycofany. "Suppress": zamknięty kod wykonuje własne wynagrodzenie, więc nie może być częścią transakcji. " To oznacza (dla mnie) "popełnienie" lub "cofnięcie". PolecenieNowe TransactionScope nie może być manipulowane lub zależne od transakcji zewnętrznej - żadna z nich nie wpływa na drugą. To właśnie powinno wykonać zadanie SuppressScope. – Jaxidian
Szczerze mówiąc, źle odczytałem twój drugi blok kodu i myślałem, że masz 2 zagnieżdżone transakcje() (pominięte w Suppress na zewnętrznym). Będę edytować – Eddy
I tylko wyjaśnić ... Jeśli wycofam transakcję RequiredNew, która w żaden sposób nie wpływa na nadrzędną transakcję TransactionScope, i podobnie, jeśli wycofam nadrzędną transakcję TransactionScope, to w żaden sposób nie wpływa ona na transakcję RequiredNew? Przepraszam, chcę tylko upewnić się, że rozumiem te opcje w pełni. Wiele potencjalnie nieprzyjemnych efektów ubocznych (zakleszczenie, operacje nie-atomowe, itp.), Jeśli je pomieszam! – Jaxidian