我继承了一项Windows服务,我不明白在启动代码中创建新线程背后的目的。 OnStart服务方法调用Start()。正如您所看到的,我们加入了这个新线程,因此请在返回之前等待它完成。
我的理解是,任何长时间运行的启动代码都应该移动到一个新线程,但是那个不应该等待它完成,因为我们需要响应windows服务经理及时。
有人可以告诉我;此服务启动代码中线程的用途是什么?
public void Start()
{
if (MyServerState.Stopped == this._srvrState)
{
this._srvrState = MyServerState.Starting;
lock (this._startStopLock)
{
Thread startup = new Thread(Startup);
startup.Priority = ThreadPriority.AboveNormal;
startup.Name = "Publisher Startup";
startup.Start();
startup.IsBackground = true;
startup.Join(SYSRESPONSE_INTERVAL);
}
}
}
答案 0 :(得分:0)
Startup.Join不应该在那里,因为你正确地说服务启动应该尽快完成。上面的代码可能正常工作,因为SYSRESPONSE_INTERVAL可能小于30秒(服务控制台给启动线程完成的时间)。即使您删除了Join,您的代码也应该正常运行。