.Net Core 2.1 长任务上报进度

.Net Core 2.1 Reporting progress of long task

我正在使用 Core 2.1 和 Entity Framework 后端 SQL服务器。

其中一些函数是长期 运行ning 任务。一个示例是地址地名词典 CSV 文件的导入。这些文件的大小通常为 50-100Mb,需要解析。我已经编写了一个上传器和导入函数,大约需要 15 分钟 运行s - 其中大部分是数据库写入时间。

我正在尝试找到一种方法来 运行 导入过程,以便它可以向客户端浏览器报告进度,理想情况下是将菜单选项更改为进度条,直到任务完成 - 因为_layout.cshtml 在每个页面上,它会让任何用户知道任务是 运行ning 以及何时完成。

我查看了 IHostedServices 和 BackgroundService 函数,但找不到任何与我正在尝试做的相匹配的示例。我看过一篇关于 MVC5 的文章,它使用了 SignalR 和 Knockout(我不太熟悉),但它没有使用 Core 2+ 或更新的服务功能。

谁能给我指出一个类似这样的 .Net Core > 2.0 的好例子?

提前致谢。

对于较长的 运行 过程,您可以使用广泛使用的 Hangfire

文档中描述了通过 SignalR 进行进度跟踪:http://docs.hangfire.io/en/latest/background-processing/tracking-progress.html

兼容.Net Core 2.1。

就我个人而言,我会编写一个 Windows 服务来使用 Topshelf 之类的东西进行处理:http://topshelf-project.com/

因此,您的 ASP 应用会调用该进程处理任何需要处理的数据,然后它就会开始执行。添加一个端点(可能与 Nancy 类似:http://nancyfx.org/),您的 ASP 应用程序可以调用该端点来检索进度信息。