后台服务(IHostedService)似乎提前终止

时间:2019-07-02 00:51:35

标签: asp.net-core

使用dotnet core 2.1我有一个BackgroundService类,该类在Startup中实例化为HostedService。如果在ExecuteAsync中等待,则该服务将消耗队列中的项目:

while (!stoppingToken.IsCancellationRequested)
{
    try
    {
        WorkItem workItem = await TaskQueue.DequeueAsync(stoppingToken);
    }
    ...
}

在生产中,这一切都在用k5start初始化的docker容器的dll内部,以确保该容器保持连续的身份验证。

在监视该服务时,我可以看到一段时间后一切正常(在最新日志中,该服务将作业添加到TaskQueue中3天后便立即使用它们),然后又停止了。作业继续(通过API控制器)添加到队列中,但是没有发生来自等待DequeueAsync的返回。

据我所知,该线程仅在等待DequeueAsync,即使在TaskQueue中也没有任何返回,因此尚未调用StopAsync方法。

因此,我对如何调试此方法一无所知-任何建议将不胜感激。

编辑:

实际队列主要基于本文: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/host/hosted-services?view=aspnetcore-2.2&tabs=visual-studio#feedback

该类有一个信号量,一旦队列中有工作,该信号量就会释放一个线程以消耗它,并且在上面的代码中引用的DequeueAsync中只是等待信号.WaitAsync-无限期地保持循环直到工作进入队列。

0 个答案:

没有答案