离开范围后,线程TimerTest.exe!TimerTest.TimeClass.Callback(object state)
仍在运行。
避免此类正在运行的线程的最佳做法是什么?
小样本:
using System;
using System.Threading;
namespace TimerTest
{
internal class Program
{
private static void Main(string[] args)
{
// just a scope
{
var timerClass = new TimerClass(1);
}
Console.ReadKey();
}
}
internal class TimerClass
{
private Timer timer;
public TimerClass(int i)
{
this.timer = new Timer(Callback, i, 500, 1000);
}
private void Callback(object state)
{
Console.Out.WriteLine("Timer: " + state);
}
}
}
答案 0 :(得分:0)
当您在主线程中启动计时器时,实际上会在线程池中启动一个新线程。
如果要实现IDispoable并使用like:
创建计时器类(using var timerClass = new TimerClass(1))
{
your code here....
}
在dispose方法中,您需要从计时器中删除refence,以便GC收集此对象,因为不再有参考此对象。
我的意见的最佳方法是使用IDispoe和使用...
当你达到命中量时,你也可以在回调方法中清除计时器中的refenrce。
关于弱参与 - 我不确定这种情况是否符合定义