如何在 .net MVC 中管理两个任务,每个任务都需要两个多小时才能执行?我一直在从第三方网站获取大量数据,虽然我尝试过使用
async
/await
,但没有任何改进,因为问题在于获取如此大的数据,然后进行计算和存储它在数据库中。如何将这些任务移至后台线程以防止应用程序冻结?
相关代码或参考文档。
有很多方法可以做到这一点,从原始的 Thread 类,到 Task 到成熟的独立后台进程。
由于 OP 带有 backgroundworker 标签,因此也可以介绍一下 BackgroundWorker 类。据我记得,这个组件一直存在,主要用于富客户端应用程序(Windows 窗体,可能是 WPF)。
System.ComponentModel
命名空间还表明这不适合 Web 使用。
您可能想阅读 Microsoft 的文档 ASP.NET Core 中托管服务的后台任务。
所有这些选项中哪一个最好取决于应用程序的总体要求——无论是在架构上还是与弹性、可观察性和许多其他问题相关。您是否需要为长时间运行的进程显示进度条(或类似的)?您应该允许用户取消作业吗?如果长时间运行的进程在运行一个小时后崩溃,会发生什么情况?如果 Web 服务器在长时间运行的进程运行时重新启动,会发生什么情况?如果一个新的长期运行进程在一个进程已经运行时启动,会发生什么情况?
根据这些问题的答案,一种技术可能会比其他技术更合适。