【问题标题】:Does .net guarantee to call Transaction.Current.TransactionCompleted?.net 是否保证调用 Transaction.Current.TransactionCompleted?
【发布时间】:2014-09-05 14:09:57
【问题描述】:

我正在盯着一个 TransactionScope 并订阅 Transaction.Current.TransactionCompleted。为了防止并行事务出现问题,我使用了 Monitor。我可以确定在任何情况下都会调用Transaction.Current.TransactionCompleted 吗?

Monitor.Enter(TransactionScopeLockString);

TransactionOptions transactionOptions = new TransactionOptions();

TransactionScope result = new TransactionScope(scopeOption, transactionOptions);

Transaction.Current.TransactionCompleted += (sender, transactionEventArgs) =>
{
    if (transactionEventArgs.Transaction.TransactionInformation.Status
                == TransactionStatus.Aborted)
    {
        // clear stuff
    }

    Monitor.Exit(TransactionScopeLockString);
};

【问题讨论】:

    标签: c# asp.net c#-4.0


    【解决方案1】:

    尽管您的代码可能存在一个问题,但可以保证。我记得TransactionCompleted 事件是在另一个线程上调用的,所以Monitor.Exit 将不起作用。您不能在一个线程上进入监视器并在另一个线程上退出。

    我相信你可以改用ManualResetEventMonitor.Enter and Monitor.Exit in different threads

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-06
      • 1970-01-01
      • 2011-11-06
      • 1970-01-01
      • 1970-01-01
      • 2011-07-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多