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:
- 持久存储系统,例如 Azure 队列或 AWS 简单队列服务。
- 一个独立的处理器,例如 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);
}
我有一些处理时间较长的流程,客户不需要立即响应。我试过下面的代码但没有成功。
[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:
- 持久存储系统,例如 Azure 队列或 AWS 简单队列服务。
- 一个独立的处理器,例如 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);
}