asp.net core控制器方法返回结果后如何继续处理?

Sak*_*ake 4 asp.net asynchronous asp.net-core

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

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

在我的 LongProces 完成返回给客户端之前,该服务仍然需要一些时间。如何让Run方法及时返回给客户端?

Ste*_*ary 7

如何让Run方法及时返回给客户端?

您需要一个基本的分布式架构。我建议

  1. 持久存储系统,例如 Azure 队列或 AWS Simple Queue Service。
  2. 独立处理器,例如 Azure Functions 或 AWS Lambda。

然后,您的 API 将消息排入队列并返回:

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

独立处理器将消息出队并处理它们:

async Task HandleMessage(Message message)
{
  await LongProcess().ConfigureAwait(false);
}
Run Code Online (Sandbox Code Playgroud)