Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .net是否保证调用Transaction.Current.TransactionCompleted?_C#_Asp.net_C# 4.0 - Fatal编程技术网

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

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

我正在启动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);
};

虽然您的代码可能有一个问题,但这是可以保证的。我记得另一个线程调用了
TransactionCompleted
事件,因此
Monitor.Exit
无法工作。不能在一个线程上进入监视器,在另一个线程上退出监视器

我相信您可以使用
ManualResetEvent
来代替: