.net是否保证调用Transaction.Current.TransactionCompleted?

时间:2014-09-03 15:27:01

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

我正在查看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);
};

1 个答案:

答案 0 :(得分:1)

尽管您的代码可能存在一个问题,但仍然可以保证。我记得在另一个线程上调用了TransactionCompleted事件,因此Monitor.Exit将无效。您无法在一个线程上进入监视器并将其退出另一个线程。

我相信您可以使用ManualResetEvent代替Monitor.Enter and Monitor.Exit in different threads