我有一个 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 究竟是如何工作的。关于如何正确执行此操作的任何想法?