Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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# 我是否应该从TransactionScope TransactionCompleted事件中注销?_C#_.net_Memory Management - Fatal编程技术网

C# 我是否应该从TransactionScope TransactionCompleted事件中注销?

C# 我是否应该从TransactionScope TransactionCompleted事件中注销?,c#,.net,memory-management,C#,.net,Memory Management,通常,在.net中注册事件时,最好在不再需要对象以避免内存泄漏时取消注册这些事件 使用TransactionScope的TransactionCompleted事件的情况是什么 考虑以下代码段: using (var scope = new TransactionScope(TransactionScopeOption.Required)) { Transaction.Current.TransactionCompleted += OnTransactionCompleted;

通常,在.net中注册事件时,最好在不再需要对象以避免内存泄漏时取消注册这些事件

使用TransactionScope的TransactionCompleted事件的情况是什么

考虑以下代码段:

using (var scope = new TransactionScope(TransactionScopeOption.Required))
{
    Transaction.Current.TransactionCompleted += OnTransactionCompleted;

    // do something

    scope.Complete();
}
查看何时应注销“TransactionCompleted”事件

如果我在using语句的末尾执行此操作,那么可以保证事件处理程序已经执行了吗

另一个选择是取消在事件处理程序本身的注册,但我不确定在此之前是否会启动另一个TransactionScope

TransactionCompleted事件何时引发?我是否可以确定,当范围对象完成处理时,它将被引发?(离开“使用”块)

我看不到任何关于这一点的参考文献

如果我在using语句的末尾这样做,可以保证 事件处理程序是否已执行

不,因为它可能是嵌套范围。一次只有一个事务处于活动状态,它由最外层的作用域管理

我是否可以确定,当范围对象完成处理时,它将被引发

出于同样的原因,否。它是在事务提交时引发的,这通常是在处理最外层范围时引发的

您不需要注销事件处理程序,因为事务是不可重用的短期对象