【发布时间】:2020-04-24 21:40:23
【问题描述】:
我的控制器中有以下操作:
[HttpPost("run")]
public Task<object> Run([FromBody] ResearchRequest researchRequest)
{
researchService.RunAsync(researchRequest);
return new{ queued = true };
}
控制器需要处理需要几分钟的任务。
这是释放researchService.RunAsync 处理其工作的正确方法吗?
或者有没有更好的方法。
谢谢
【问题讨论】:
-
一般来说,这是一个正确的做法。但是,您还应该考虑其他一些事情。例如。如果有人多次发布相同的
ResearchRequest应该如何处理?检查 researchRequest 是否已经排队,而不是再排队一个没有意义吗?此外,我看不出您在这里需要async的原因。如果理解正确,你想要的是一个即发即弃的动作,你不需要控制器等待提交researchRequest的过程完成。正确吗? -
你已经标记了你的方法
async但你没有awaiting 任何东西。 -
@Christos 谢谢。 (异步是错误的)。我将如何检查是否有任务已经在运行(我需要一些来自队列任务的数据上下文以确保它正在运行)?谢谢。
-
@fatnjazzy 你可以在 researchService 中添加一个标志,当你进入 RunAsync 时设置为 true ,当你即将返回时设置为 false ,然后在执行前快速检查 Run 操作方法运行异步
-
相关:How should I run a long-running task in ASP.NET? 简短回答:你不应该。将长时间运行的逻辑卸载到单独的服务。
标签: c# asp.net asp.net-mvc async-await