覆盖C#事务中的最大超时。这是可取的吗?

时间:2015-07-27 14:48:05

标签: c# timeout transactionscope system.reflection

我在事务中有一组DB语句(插入,更新等),它们在for循环中执行,就像这样。

using (Transaction)
{
  for (loop until x values)
  {
    Insert
    Update
  }
}

然后我complete() and dispose() TransactionScope。它适用于较少数量的' x。但是如果x非常大,则事务超时,因为它默认为10分钟(来自machine.config)

我的问题:当我们可以保证不会出现死锁时,是否可以增加该TransactionScope代码级别的超时?我使用以下代码覆盖默认值(从10分钟到4小时)。它工作正常,但它是否可取?

        public static class TransHelper
        {
            public static void OverrideMaximumTimeout(TimeSpan timeout)
            {
                var type = typeof(TransactionManager);
                var cachedMaxTimeout = type.GetField("_cachedMaxTimeout", BindingFlags.NonPublic | BindingFlags.Static);
                cachedMaxTimeout.SetValue(null, true);

                var maximumTimeout = type.GetField("_maximumTimeout", BindingFlags.NonPublic | BindingFlags.Static);
                maximumTimeout.SetValue(null, timeout);
            }
        }

我打电话给,

TransHelper.OverrideMaximumTimeout(TimeSpan.FromHours(4));

0 个答案:

没有答案