Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 后台任务正在排队,未执行_C#_Asp.net Core_Autofac - Fatal编程技术网

C# 后台任务正在排队,未执行

C# 后台任务正在排队,未执行,c#,asp.net-core,autofac,C#,Asp.net Core,Autofac,我已经实现了BackgroundQueue,如图所示: public ActionResult SomeAction() { backgroundQueue.QueueBackgroundWorkItem(async ct => { //Do some work... }); return Ok(); } 我在Autofac注册了BackgroundQueue作为: builder.RegisterType<BackgroundQu

我已经实现了BackgroundQueue,如图所示:

public ActionResult SomeAction()
{
    backgroundQueue.QueueBackgroundWorkItem(async ct =>
    {
        //Do some work...
    });

    return Ok();
}
我在Autofac注册了BackgroundQueue作为:

builder.RegisterType<BackgroundQueue>()
    .As<IBackgroundQueue>()
    .SingleInstance();
builder.RegisterType()
.As()
.SingleInstance();
到目前为止还不错。我调用我的控制器操作,任务被添加到队列中。它就在那里,没有被处决


那么,如何让任务执行呢?

您从中获取的
BackgroundQueue
实现只是解决方案的一部分:后台队列只会跟踪您想要执行的作业

您还需要的是文档中的下方:
QueuedHostedService
。这是一个后台服务,在DI容器中注册,并在应用程序启动时启动。从那时起,它将监视您的
背景队列
,并在作业排队时处理它们

此后台服务的简化示例实现(没有日志记录或错误处理)如下所示:

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);
        }
    }
}

您采用的
BackgroundQueue
实现只是解决方案的一部分:后台队列将只跟踪您想要执行的作业

您还需要的是文档中的下方:
QueuedHostedService
。这是一个后台服务,在DI容器中注册,并在应用程序启动时启动。从那时起,它将监视您的
背景队列
,并在作业排队时处理它们

此后台服务的简化示例实现(没有日志记录或错误处理)如下所示:

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);
        }
    }
}