为长时间运行的任务实现后台线程

问题描述 投票:0回答:1

如何在 .net MVC 中管理两个任务,每个任务都需要两个多小时才能执行?我一直在从第三方网站获取大量数据,虽然我尝试过使用

async
/
await
,但没有任何改进,因为问题在于获取如此大的数据,然后进行计算和存储它在数据库中。如何将这些任务移至后台线程以防止应用程序冻结?

相关代码或参考文档。

asp.net asp.net-mvc multithreading asp.net-mvc-4 backgroundworker
1个回答
0
投票

有很多方法可以做到这一点,从原始的 Thread 类,到 Task 到成熟的独立后台进程。

由于 OP 带有 backgroundworker 标签,因此也可以介绍一下 BackgroundWorker 类。据我记得,这个组件一直存在,主要用于富客户端应用程序(Windows 窗体,可能是 WPF)。

System.ComponentModel
命名空间还表明这不适合 Web 使用。

您可能想阅读 Microsoft 的文档 ASP.NET Core 中托管服务的后台任务

所有这些选项中哪一个最好取决于应用程序的总体要求——无论是在架构上还是与弹性、可观察性和许多其他问题相关。您是否需要为长时间运行的进程显示进度条(或类似的)?您应该允许用户取消作业吗?如果长时间运行的进程在运行一个小时后崩溃,会发生什么情况?如果 Web 服务器在长时间运行的进程运行时重新启动,会发生什么情况?如果一个新的长期运行进程在一个进程已经运行时启动,会发生什么情况?

根据这些问题的答案,一种技术可能会比其他技术更合适。

© www.soinside.com 2019 - 2024. All rights reserved.