![](/img/trans.png)
[英]Queued tasks in thread pool are exiting, not being released back into pool
[英]Background tasks are being queued and not executed
我已经按照此处的说明实现了 BackgroundQueue,如图所示:
public ActionResult SomeAction()
{
backgroundQueue.QueueBackgroundWorkItem(async ct =>
{
//Do some work...
});
return Ok();
}
我使用 Autofac 将 BackgroundQueue 注册为:
builder.RegisterType<BackgroundQueue>()
.As<IBackgroundQueue>()
.SingleInstance();
到现在为止还挺好。 我调用我的控制器操作并将任务添加到队列中。 它在那里没有被执行。
那么如何让任务执行呢?
您从文档中获取的BackgroundQueue
实现只是解决方案的一部分:后台队列将只跟踪您想要执行的作业。
您还需要在文档的正下方:The QueuedHostedService
。 这是一个向 DI 容器注册并在应用程序启动时启动的后台服务。 从那时起,它将监视您的BackgroundQueue
并在作业排队时处理它们。
此后台服务的简化示例实现(没有日志记录或错误处理)可能如下所示:
public class QueuedHostedService : BackgroundService
{
private readonly IBackgroundQueue _backgroundQueue;
public QueuedHostedService(IBackgroundQueue backgroundQueue)
{
_backgroundQueue = backgroundQueue;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
var workItem = await _backgroundQueue.DequeueAsync(stoppingToken);
await workItem(stoppingToken);
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.