查看包含一堆间接嵌套的事务管理器的一些代码。我想知道在嵌套的事务管理器中处理超时的方式。示例代码
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?
答案 0 :(得分:2)
肯定不会是90秒;那是总和,而不是联盟。 “现在直到30秒”和“直到60秒”的联合只是“现在直到60秒”。当然,通过故意阻止自己来验证应该非常简单。我 怀疑 这意味着“所有超时的交集”,在这种情况下,重要的是30秒;因为:只有最外层的事务才有权提交 - 但是配置单元中的任何事务都会导致整个事务失败(任何级别的回滚都会回滚整个最外层的事务)