使用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方法。
因此,我对如何调试此方法一无所知-任何建议将不胜感激。
编辑:
该类有一个信号量,一旦队列中有工作,该信号量就会释放一个线程以消耗它,并且在上面的代码中引用的DequeueAsync中只是等待信号.WaitAsync-无限期地保持循环直到工作进入队列。