継続的に実行され、いくつかの作業を行うためにいくつかのスレッドを作成する Windows サービスがあります。これらのスレッドが適切に破棄されていることを確認したい (終了後に収集されたガベージ.
ただし、定期的に生きているかどうかを確認し、生きている場合は終了できるようにしたいと考えています。ただし、ガベージコレクションされないため、それらへの参照を保持できないことはわかっています。
ユーザー定義スレッドの存在/状態を確認する別の方法はありますか? を使用して次のようなことを考えていましたWeakReference
:(今は完全にテストできないか、自分でテストするだけです)
List<WeakReference> weakReferences;
Thread myThread = new Thread(() => Foo());
WeakReference wr = new WeakReference(myThread);
weakReferences.Add(wr); //adds a reference to the thread but still allows it to be garbage collected
myThread.Start();
myThread = null; //get rid of reference so thread can be garbage collected
そして、私の onTimeElapsed イベントの開始時 (5 分ごとに実行):
foreach(WeakReference wr in weakReferences)
{
Thread target = wr.Target as Thread; //not sure if this cast is really possible
if(target.IsAlive && otherLogic)
{
target.Abort();
{
}
しかし、WeakReference がどのように機能するのか正確にはわかりません。これを適切に行う方法についてのアイデアはありますか?