asp.net 核心控制器方法产生 return 结果后如何继续处理?

How to continue processing after return result from asp.net core controller method?

我有一些处理时间较长的流程,客户不需要立即响应。我试过下面的代码但没有成功。

    [HttpPost, Route("run")]
    public async Task Run()
    {
        _ = this.LongProcess().ConfigureAwait(false);
        return await Task.CompletedTask;
    }

我的 LongProces 在 return 到客户端之前完成服务仍然需要时间。 我怎样才能让运行方法return及时给客户?

How can I make the Run method return to the client promptly?

您需要一个基本的分布式架构。 I recommend:

  1. 持久存储系统,例如 Azure 队列或 AWS 简单队列服务。
  2. 一个独立的处理器,例如 Azure Functions 或 AWS Lambdas。

然后,您的 API 将消息排入队列并且 returns:

[HttpPost, Route("run")]
public async Task Run()
{
  var message = new Message();
  await _queueService.EnqueueAsync(message);
  return;
}

并且独立处理器使消息出列并处理它们:

async Task HandleMessage(Message message)
{
  await LongProcess().ConfigureAwait(false);
}