2

我们已将 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 代码似乎只是取消了令牌,它似乎并没有等待正在侦听取消令牌的进程被杀死。拜托,有人可以建议我们如何让这个工作,如果需要更多详细信息,请告诉我?

4

0 回答 0