我是否应该从事务范围事务已完成事件中注销
本文关键字:事务 已完成 事件 注销 范围 是否 | 更新日期: 2023-09-27 17:57:04
通常在 .net 中注册事件时,最好在不再需要对象时取消注册它们以避免内存泄漏。
使用 TransactionScope 的 TransactionDone 事件是什么情况?
请考虑以下代码片段:
using (var scope = new TransactionScope(TransactionScopeOption.Required))
{
Transaction.Current.TransactionCompleted += OnTransactionCompleted;
// do something
scope.Complete();
}
查看何时应取消注册"事务已完成"事件,
如果我在 using 语句的末尾执行此操作,可以保证事件处理程序已经执行?
另一种选择是在事件处理程序本身取消注册,但我不确定在此之前另一个 TransactionScope 不会启动。
何时引发事务已完成事件?我能否确定在范围对象完成处置时会引发该事件?(离开"使用"块)
我在 MSDN 文档和源代码中都没有看到对此的任何引用。
如果我在 using 语句的末尾执行此操作,则可以保证 事件处理程序已执行?
否,因为它可能是嵌套范围。一次只有一个事务处于活动状态,它由最外层的范围管理。
我能确定当范围对象完成处置时会引发它吗?
出于同样的原因,没有。它在事务提交时引发,通常是在释放最外层范围时。
不需要注销事件处理程序,因为事务是不重用的短期对象。