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ď č. 1Urč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)