.NET:由于事务超时导致的异步回滚

时间:2009-01-21 10:42:03

标签: c# .net multithreading timeout transactions

在C#项目中,System.Transactions.Transaction中有一个(易变的)交易资源。 当发生事务超时时,回滚在工作线程中执行:显然,事务使用计时器并在计时器过去时调用计时器回调(在此问题上 Microsoft 的文档很少) 。因此,我的事务资源中的IEnlistmentNotification.Rollback(...)的实现是异步调用的。

我的问题是:我该如何处理?当然,回滚代码会更改我的资源的内部状态,例如通过放弃更改。似乎我必须同步对此资源的所有访问权限。但是,该资源不是为了保存线程而设计的。有没有人有这个问题的经验,或者是否有某种“最佳实践”?

1 个答案:

答案 0 :(得分:0)

我猜你可以锁定资源的回滚方法以使它们同步,因为回滚将是奇怪的情况,并且序列化访问不会导致太多问题......

使用IoC,例如Windsor,实现IInterceptor并使用拦截器锁定所有IResource.Rollback()方法。这是一个正交问题,所以它应该实现为一个。