我们已将Hangfire配置为使用tutorial中提供的OWIN作为我们的网络应用程序的一部分运行。
我们通过我们提供的API将长时间运行的后台进程排入队列。我们运行的作业使用.Net Process类在后台初始化R进程。 R代码在内部产生许多进程以更快地完成作业。当作业运行时,我们在任务管理器中运行了许多Rscript进程。
手动回收我们的Web应用程序的应用程序池(以查看进程重启的工作原理)Rscript进程未被杀死。我们有一个自定义杀戮策略,我们可以摆脱代码中的所有Rscript进程。
while (IsNotTimedOut())
{
try
{
_token.ThrowIfCancellationRequested();
Thread.Sleep(2000);
}
catch (OperationCanceledException)
{
Kill();
throw;
}
}
在kill方法中,我们使用Process.WaitForExit()方法阻止。
当我们进行手动回收时,所有过程都不会被杀死。杀死几个Rscript进程后,当前线程而不是阻止进程杀死只是死亡。
hangfire代码似乎只是取消了令牌,它似乎没有等待正在侦听取消令牌的进程被杀死。请有人建议我们如何使其正常工作,如果需要更多详细信息,请与我们联系?