3

查看包含一堆間接嵌套事務處理器的代碼。我想知道在嵌套事務處理器中處理超時的方式。示例代碼嵌套事務處理器中的超時

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(); 
    } 
} 

MSDN國 - 在嵌套的TransactionScope層次,超時是所有超時的工會。實際上,層次結構中所有範圍的最小超時優先。

第一個聲明說明所有超時的聯合,但第二個聲明說它是所有範圍中最小的。我是否理解上面的嵌套作用域代碼的默認超時時間是30秒而不是90?

回答

2

它肯定不會是90秒;那就是總和,而不是聯合。 「現在直到30秒」和「不到60秒」的聯合僅僅是「現在直到60秒」。當然,通過故意阻止自己來驗證應該非常簡單。我嫌疑人它意味着「所有超時的交集」,在這種情況下,它是30秒的事情;因爲:只有最外層的交易纔有權提交 - 但配置單元中的任意交易可能會導致整個交易(任何級別的回滾回滾整個最外層交易)

+0

使內部循環睡眠30秒。有一個超時,冒泡到根交易。但是,代碼捕獲根事務中的異常,從而使其在超時之前等待60秒。如果沒有處理來自嵌套作用域的異常,我相信它會出現超時異常。我認爲這些陳述確實意味着所有超時的交集。會做更多的測試... – user529265 2012-03-13 07:52:23