Start
方法运行
开始
执行顺序如下所示。箭头指示在不同线程中运行的内容:
-> MyService.Start -> pA.Start -> pb.Start -> return
\_> DoWork() \
\_> DoWork()
既然都
DoWork()
有什么建议可以避免这个问题吗?提前谢谢。
以下代码是对实际代码的过度简化:
public class MyService
{
private PluginA pA = new PluginA();
private PluginB pB = new PluginB();
public void Start()
{
pA.Start();
pB.Start();
}
public void Stop()
{
pA.Stop();
pB.Stop();
}
}
public class PluginA
{
private Timer _timer;
public void Start()
{
_timer = new Timer(
(e) => DoWork(),
null,
TimeSpan.Zero,
TimeSpan.FromSeconds(10));
}
private void DoWork()
{
File.AppendAllText(
"C:/log.txt",
"hello" + Environment.NewLine);
}
public void Stop()
{
_timer.Change(Timeout.Infinite, 0);
}
}
public class PluginB
{
private Timer _timer;
public void Start()
{
_timer = new Timer(
(e) => DoWork(),
null,
TimeSpan.Zero,
TimeSpan.FromSeconds(10));
}
private void DoWork()
{
File.AppendAllText(
"C:/log.txt",
"Goodbye" + Environment.NewLine);
throw new Exception("Goodbye");
}
public void Stop()
{
_timer.Change(Timeout.Infinite, 0);
}
}