适合长时间运行的异步进程的正确 .NET 架构

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

我正在构建 c# .NET 4.8.1 MVC Web 应用程序,该应用程序将允许用户设置一个可能长时间运行的任务来处理可能数千条记录。用户应该能够立即执行任务或将其安排在未来的日期/时间。如果他们立即执行它,网页应该显示一个进度表,随着任务进度的发生,该进度表会从服务器更新。但是,如果他们离开页面并返回(或在计划任务开始后返回),我想附加到异步进程,以便用户仍然可以获得更新的进度报告。只要任务正在运行,用户还应该可以选择通过 UI 暂停、恢复或取消任务。

我不是异步架构或编程方面的专家。我应该设置一个单独的 WCF 服务来处理后端吗?在初始创建后,如何处理将 UI 网页重新附加到任务流程的情况?我将任务详细信息存储在 MS SQL Server 表中。谁能给我一些关于正确方向的指导?

c# asp.net-mvc asynchronous wcf
1个回答
0
投票

如果不将任务分成多个块,就没有简单可靠的方法可以做到这一点。因此操作的每一步都必须是一个单独的任务。所有块本质上代表一个分布式事务。因此,这类似于 Saga 模式,只不过所有操作都由单个服务执行。

因此需要将事务状态信息存储在同一个数据库中。操作的状态应在执行当前阶段更改的同一数据库事务内进行标记。如果取消操作,则需要对已完成的阶段执行相反的操作。

事务状态显然可以通过单独的查询从数据库中读取。操作的取消也可以通过单独的查询在数据库中标记。

作为奖励,您将能够在出现技术故障后继续操作。

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