这个异常会在 Dispose
时触发,而不是Complete
,即使在规定时间内提交了,但如果释放时超时,依然会抛出异常
所以如果using范围较大,需要手动执行Dispose
换句话说,如果需要处理 TransactionScope
的异常,需要将Try包裹using,而不是反过来using包裹try
using (var trans = new TransactionScope(TransactionScopeOption.RequiresNew, new TransactionOptions { Timeout = TimeSpan.FromSeconds(2) }))
{
try
{
trans.Complete();
}
catch(Exception e)
{
// 这样没办法捕获超时异常
}
}
正确的捕获方式
try
{
using (var trans = new TransactionScope(TransactionScopeOption.RequiresNew, new TransactionOptions { Timeout = TimeSpan.FromSeconds(2) }))
{
trans.Complete();
}
}
catch(Exception e)
{
}
网友评论