我有一个Windows服务,该服务正在使用API,该API每次启动时都会将数据发送到API,并且在禁用该服务时,需要将此信息用于API。我使用的是Thread,但是它不遵守确定的时间,因此它没有时间向它发送有关该服务已针对API停止的信息。
我该如何延迟服务停止并让数据有时间到达API?
protected override void OnStart(string[] args)
{
_writeFile.Log("Foi iniciado o serviço");
_shutdownEvent = new ManualResetEvent(false);
_thread = new Thread(async () => await ControlSendHistorico());
_thread.Start();
base.OnStart(args);
}
protected override void OnStop()
{
if (_stopping) return;
try
{
_stopping = true;
_shutdownEvent.Set();
//_shutdownEvent.WaitOne(30000);
_thread.Join(30000);
_writeFile.Log("O serviço foi parado");
base.OnStop();
}
catch (Exception e)
{
_writeFile.Log("Falha ao parar o serviço " + e.Message);
}
finally
{
_stopping = false;
}
}
答案 0 :(得分:0)
我使用“ Thread.Sleep();”解决了该问题。 它确实锁定了服务的主线程,而不像我以前那样锁定中间线程。
protected override void OnStop()
{
if (_stopping) return;
try
{
_stopping = true;
_shutdownEvent.Set();
Thread.Sleep(500);
_writeFile.Log("O serviço foi parado");
base.OnStop();
}
catch (Exception e)
{
_writeFile.Log("Falha ao parar o serviço " + e.Message);
}
finally
{
_stopping = false;
}
}