【发布时间】:2010-09-16 15:55:07
【问题描述】:
来自MSDN entry for TransactionCompleted:
您可以注册此事件,而不是使用 volatile 登记来获取交易的结果信息。
警告注册此事件会对它所附加的交易的性能产生负面影响。
有没有人有一个例子,甚至是解释,说明如何加入一个事务以便仅仅被通知它的完成?
【问题讨论】:
标签: .net transactions system.transactions
来自MSDN entry for TransactionCompleted:
您可以注册此事件,而不是使用 volatile 登记来获取交易的结果信息。
警告注册此事件会对它所附加的交易的性能产生负面影响。
有没有人有一个例子,甚至是解释,说明如何加入一个事务以便仅仅被通知它的完成?
【问题讨论】:
标签: .net transactions system.transactions
MSDN 在这里可能有点误导。注册事件至少应该和注册一个虚拟资源管理器一样快(不是我测试过的)。
问题是,如果您登记,事务将成为分布式事务(因为现在至少涉及两个资源管理器)。这样的事务较慢(与数据库服务器或您使用的任何东西的更多 IO)。
您仍然可以尝试登记方式。只需实现IEnlistmentNotification 并在每个方法中调用enlistment.Done()。您还需要将代码添加到 Commit() 方法中。
然后将对您的实现的引用传递给事务的EnlistVolatile(..) 方法(选项设置为None)。
【讨论】:
EnlistVolatile 永远不会促进交易。