/ / timeout vo vnorených transakciách - c #, sql, entity-framework, entity-framework-4.1, transactionscope

timeout vo vnorených transakciách - c #, sql, entity-framework, entity-framework-4.1, transactionscope

Preskúmanie niektorého kódu, ktorý obsahuje zväzok nepriamo vnorených transakčných nástrojov. Chcel by som vedieť, ako sa vyriešili časové limity vo vnorených transakčných prístrojoch. Príkladový kód

void RootMethod()
{
//default timeout is 60 seconds
using(TransactionScope scope = new TransactionScope())
{
/* Perform transactional work here */
SomeMethod();
scope.Complete();
}
}

void SomeMethod()
{
//set timeout to 30 seconds
TimeSpan timeout = TimeSpan.FromSeconds(30);
using(TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, timeout))
{
/* Perform transactional work here */
scope.Complete();
}
}

Štáty MSDN - Vo vnorenej hierarchii TransactionScope je časový limit spojením všetkých časových limitov. V skutočnosti má najvyšší časový limit všetkých rozsahov v hierarchii, má prednosť.

Prvé vyhlásenie hovorí o spojení všetkých časových limitovale druhý výrok hovorí, že je najmenší zo všetkých oblastí. Mám správne pochopiť, že vyššie uvedený kód s vnoreným rozsahom má predvolený časový limit 30 sekúnd a nie 90?

odpovede:

2 pre odpoveď č. 1

Určite nebude trvať 90 sekúnd, to je súčet, nie únia. Spojenie "teraz až 30 sekúnd" a "nie skôr ako 60 sekúnd" je jednoducho "teraz až 60 sekúnd". Malo by byť celkom jednoduché overiť, samozrejme, zámerným blokovaním seba. ja podozrivý to znamená "križovatku všetkých časových limitov", v tom prípade je to dôležité 30 sekúnd; pretože: iba najvzdialenejšia transakcia má právomoc spáchať - ale akýkoľvek transakcia v úrade môže vyriešiť celú transakciu (vrátenie na ľubovoľnú úroveň vráti celú vonkajšiu transakciu)