C# 我是否应该从TransactionScope TransactionCompleted事件中注销?
通常,在.net中注册事件时,最好在不再需要对象以避免内存泄漏时取消注册这些事件 使用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;
using (var scope = new TransactionScope(TransactionScopeOption.Required))
{
Transaction.Current.TransactionCompleted += OnTransactionCompleted;
// do something
scope.Complete();
}
查看何时应注销“TransactionCompleted”事件
如果我在using语句的末尾执行此操作,那么可以保证事件处理程序已经执行了吗
另一个选择是取消在事件处理程序本身的注册,但我不确定在此之前是否会启动另一个TransactionScope
TransactionCompleted事件何时引发?我是否可以确定,当范围对象完成处理时,它将被引发?(离开“使用”块)
我看不到任何关于这一点的参考文献
如果我在using语句的末尾这样做,可以保证
事件处理程序是否已执行
不,因为它可能是嵌套范围。一次只有一个事务处于活动状态,它由最外层的作用域管理
我是否可以确定,当范围对象完成处理时,它将被引发
出于同样的原因,否。它是在事务提交时引发的,这通常是在处理最外层范围时引发的
您不需要注销事件处理程序,因为事务是不可重用的短期对象