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

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

}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容