c# - 在.net core web api中异步调用长时间运行进程的最佳方法
问题描述
我正在尝试像这样从 web api 调用一个长时间运行的任务
[HttpGet]
public async Task<IActionResult> Get()
{
await Task.Run(()=>_report.TestFunctionAsync());
return Accepted();
}
这就是任务
public async Task TestFunctionAsync()
{
ProcessStatus = 0;
Task.Delay(TimeSpan.FromSeconds(30));
ProcessStatus = 1;//wrting to DB
Task.Delay(TimeSpan.FromSeconds(10));
ProcessStatus = 2;//Fetching from Excel
Task.Delay(TimeSpan.FromSeconds(20));
ProcessStatus = 3;//Processing
Task.Delay(TimeSpan.FromSeconds(50));
ProcessStatus = 9;//Finished
}
但是当我从 UI 的角度搜索时,我发现它的异步和 UI 永远不会被阻止。但它不是正确的方法。
因此,请提出一种更好的实施方式。还有什么方法可以了解异步任务的状态(使用 ProcessStatus 属性)
解决方案
由于 ASP.NET MVC 本身不提供处理长时间运行任务的能力,因此您必须创建一个外部解决方案。
推荐阅读
- ubuntu-18.04 - ld 找不到库,即使使用 ldconfig,甚至 ld -L -lmylib 也无法打开
- android - 键盘未显示在 Webview 中
- python - 将多个列分组并在组内排名
- php - PHP检查“变量变量” isset
- html - 在html中动态改变body的背景
- javascript - 限制用户手动选择业务流程阶段
- java - 如何在 Java 中计算我的原始点和提供的点之间的距离
- java - Keycloak getAccessToken 在 Java Eclipse/Maven 项目中工作,但通过命令行运行时抛出 ProcessingException
- ios - 通过在 Swift 中使用协议将值从一个视图反转到另一个视图
- go - 在谷歌云上部署服务器二进制文件