2

C# プロジェクトでは、(揮発性の) トランザクション リソースがSystem.Transactions.Transaction. トランザクション タイムアウトが発生すると、ワーカー スレッドでロールバックが実行されます。明らかに、トランザクションはタイマーを使用し、タイマーが経過するとタイマー コールバックを呼び出します (この問題に関するMicrosoft
の ドキュメントはほとんどありません)。したがって、私のトランザクション リソースでの ) の実装は、非同期的に呼び出されます。 IEnlistmentNotification.Rollback(...

私の質問は次のとおりです。これをどのように処理しますか? もちろん、ロールバック コードは、変更を破棄するなどして、リソースの内部状態を変更します。このリソースへのすべてのアクセスを同期する必要があるようです。ただし、リソースはスレッド保存用に設計されていません。誰かがこの問題を経験したことがありますか、それとも何らかの「ベストプラクティス」がありますか?

4

1 に答える 1

0

リソースのロールバック メソッドをロックして、それらを同期させることができると思います。ロールバックは奇数ケースアウトであり、アクセスをシリアル化してもパフォーマンスに関してあまり問題が発生しないためです...

Windsor などの IoC では、IInterceptor を実装し、すべての IResource.Rollback() メソッドをインターセプターでロックします。これは直交する懸念事項であるため、1 つとして実装する必要があります。

于 2010-10-24T20:19:54.463 に答える