在C#项目中,System.Transactions.Transaction
中有一个(易变的)交易资源。
当发生事务超时时,回滚在工作线程中执行:显然,事务使用计时器并在计时器过去时调用计时器回调(在此问题上 Microsoft 的文档很少) 。因此,我的事务资源中的IEnlistmentNotification.Rollback(...
)的实现是异步调用的。
我的问题是:我该如何处理?当然,回滚代码会更改我的资源的内部状态,例如通过放弃更改。似乎我必须同步对此资源的所有访问权限。但是,该资源不是为了保存线程而设计的。有没有人有这个问题的经验,或者是否有某种“最佳实践”?
答案 0 :(得分:0)
我猜你可以锁定资源的回滚方法以使它们同步,因为回滚将是奇怪的情况,并且序列化访问不会导致太多问题......
使用IoC,例如Windsor,实现IInterceptor并使用拦截器锁定所有IResource.Rollback()方法。这是一个正交问题,所以它应该实现为一个。