在 ASP.NET Core Web 应用程序中,如果任务按预期运行,如何执行异步任务向用户返回消息,然后执行另一个任务



在 ASP.NET Core 2.2 Razor页面应用程序中,我想执行一个冗长的任务,然后立即向客户端返回一条消息,然后在长时间运行的任务按预期完成执行另一个任务。

  • 任务 A 是创建数据库的长时间运行的脚本
  • 如果结果符合预期,则任务 B 会在任务 A 完成后将一些数据插入数据库表中。

我尝试了下面的代码,但它似乎导致应用程序挂起长时间运行的任务的整个长度。

public async Task<IActionResult> OnPost()
{
if (ModelState.IsValid)
{
Task<int> TASK_A = sql_operationA();
TASK_A.ContinueWith(async result => {
if (await result > 0)
sql_operationB());
});
RequestSuccess = true;
StatusMessage = "TASK A WAS A SUCCESS PLEASE ALLOW 2-3 MINUTES TO SEE YOUR RESULTS.";
}
return Page();
}

async-await不会改变HTTP的工作方式:1个请求有1个响应。

如果需要服务器向客户端发送除响应请求之外的内容,请使用类似 SignalR 的内容。

最新更新