C# .net是否保证调用Transaction.Current.TransactionCompleted?
我正在启动TransactionScope并订阅C# .net是否保证调用Transaction.Current.TransactionCompleted?,c#,asp.net,c#-4.0,C#,Asp.net,C# 4.0,我正在启动TransactionScope并订阅Transaction.Current.TransactionCompleted。为了防止并行事务出现问题,我使用Monitor。我能否确保在任何情况下都会调用Transaction.Current.TransactionCompleted Monitor.Enter(TransactionScopeLockString); TransactionOptions transactionOptions = new TransactionOption
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);
};
虽然您的代码可能有一个问题,但这是可以保证的。我记得另一个线程调用了
TransactionCompleted
事件,因此Monitor.Exit
无法工作。不能在一个线程上进入监视器,在另一个线程上退出监视器
我相信您可以使用ManualResetEvent
来代替: