【C#】TransactionScope 超时的处理方式

2022-11-24  本文已影响0人  冰麟轻武

这个异常会在 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)
{

}
上一篇 下一篇

猜你喜欢

热点阅读