美文网首页
【C#】TransactionScope 超时的处理方式

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

作者: 冰麟轻武 | 来源:发表于2022-11-24 08:58 被阅读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)
    {
    
    }
    

    相关文章

      网友评论

          本文标题:【C#】TransactionScope 超时的处理方式

          本文链接:https://www.haomeiwen.com/subject/pdqzxdtx.html