首页 > 解决方案 > 获取 QueueBackgroundWorkItem 的任务

问题描述

我有一个控制器:

private IBackgroundTaskQueue _queue;

[HttpPost("Add")]
public async Task<ActionResult<long>> Add([FromForm] long data)
{
    return await Task.Run(() =>
                {
                    return Calc(data);
                });
}

private ActionResult<long> Calc(long data)
{
    return new ObjectResult(data);
}

如何从https://docs.microsoft.com/en-US/aspnet/core/fundamentals/host/hosted-services?view=aspnetcore-2.2&tabs=visual-studio更改实现以使用 IBackgroundTaskQueue

在控制器中返回任务处理程序?

return await _queue.QueueBackgroundWorkItem(clt => Calc(data)); 

标签: .net-core

解决方案


QueueBackgroundWorkItem在该示例中,用于在您的控制器操作返回其响应后将工作排队到后台工作人员执行。

但是,您的示例需要返回结果(long)。所以在你的例子中使用这种队列是没有意义的。

附带说明一下,您应该避免Task.Run使用 ASP.NET;您可以直接调用该方法:

[HttpPost("Add")]
public ActionResult<long> Add([FromForm] long data)
{
  return Calc(data);
}

推荐阅读