0

スレッドの終了時に実行される現在のスレッドにイベントを追加する方法はありますか。

再利用したいが、スレッドが終了したときにリークを防ぐために破棄する必要があるリソースを作成するソリューションがあり、すべての人が手動の破棄呼び出しをコードに追加することに熱心であるとは信頼できません。

スレッドの周りにラッパーを使用してこれを行うことができますが、すべての人がラッパーを使用することを 100% 確実にすることはできず、既存のスレッドに追加する必要がある場合があるため、信頼できる解決策にはなりません。

そのため、トレッドが終了したときに呼び出される廃棄イベントを追加できるリソースが必要です。

これはC#で可能ですか

4

3 に答える 3

0

スレッドの終了時に実行される現在のスレッドにイベントを追加する方法はありますか?

いいえ、サブスクライブできるフレームワークにはイベントがありません。

あなたが言うように、1 つの解決策は、スレッドのメイン メソッドをtry / finallyブロックでラップすることです。


別の解決策は、GC に依存することです。誰かが を呼び出すのを忘れた場合Disposeでも、デストラクタは、オブジェクトがスコープ外に出た後でも呼び出されます。ただし、デストラクタはファイナライザ スレッドで呼び出されます。

于 2013-01-10T09:34:53.367 に答える
0

開発者がオブジェクトの呼び出しを忘れる可能性Dispose()があると思われる場合は、そのようなメソッドを強制的に呼び出すために使用できる別のパターンがあります。これは、データベース トランザクションの仕組みから着想を得ています。

アイデアは、2 つのメソッドを公開するオブジェクトを使用することです。Complete()RollBack()。オブジェクトの寿命の終わりに、開発者はComplete()物事を機能させるために呼び出す必要があります。彼が従わなかった場合、オブジェクトのデストラクタ (またはDispose()) は を呼び出しますRollBack()。.NETTransactionScopeクラスが良い例です。

あなたの場合、このクラス内にスレッドオブジェクトをカプセル化する必要があります。呼び出し元は、スレッド オブジェクトを直接処理するのではなく、このクラス オブジェクトを処理します。

于 2013-01-10T09:41:36.507 に答える
0

ここでは、同じ .net について話しているのでしょうか。黙認するだけFinalize

http://msdn.microsoft.com/en-us/library/b1yfkh5e(v=vs.100).aspx

http://msdn.microsoft.com/en-us/library/66x5fx1b.aspx

これは、リソースをクリアするときにいくつかの追加アクションを実行するよう「GC」に指示する方法です。

于 2013-01-10T10:00:33.133 に答える