Имам услуга на 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. Някакви идеи как правилно да направите това?