【发布时间】:2019-03-13 13:12:30
【问题描述】:
我有一个 Windows 服务正在使用一个 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;
}
}
【问题讨论】:
-
请分享
ControlSendHistorico()方法的实现。 -
@stuartd 这个方法我用过,但是没有解决问题
-
当停电,电脑没电了?在停止类型的动作中,你永远不应该尝试做任何耗时的事情——你永远不能保证你会有时间去做。最好重新设计,以便您可以在下一次启动时执行某种恢复,此时您希望有尽可能多的时间。