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