在系统崩溃和回滚的情况下取消长时间运行的任务

时间:2016-08-29 11:49:20

标签: c# async-await

我想在APIController(WebAPI自托管OWIN)中开始不同数量的任务来完成一些后台工作。基本上是:

  1. 从客户端获取请求(vi HTTP POST)并尽快返回 可能(使用200/202状态代码)无需等待很长时间 运行任务完成(客户端应该等待那么久 正在运行的任务。

  2. 发布该操作的结果将使用a发布 不同的渠道(例如:消息队列)。

  3. 首先,我计划完成这些任务,而不是完全开火并忘记进场。我想将这些任务保存在一个集合中。

    1. 在开始任务之前创建后添加。
    2. RanToCompletion或任何类型的错误/取消后删除。错误 处理将在异常处理程序中完成。
    3. 第二 - 关键点 - 是崩溃恢复。我在这些任务中使用数据(基础)并且在系统崩溃的情况下(可能是未捕获的异常或者不是崩溃但在执行路径上有一些可能的异常)我想要某种回滚来使系统保持一致州。我的第一种方法是将相同的取消令牌传递给所有这些任务,并等待在该公共func buttonTapped(sender: UIButton) { print("All Tapped") } 上调用Cancel并处理CancellationTokenSource。在OperationCanceledException的处理程序中,我可以做一些内务管理,一切都会好的。

      这对我来说有点复杂,似乎很难扎实。我试图找到解决该问题的方法 - 如果可能的话 - 不使用任何第三方服务,如hangfire。这可能是一个广泛的主题,但我的首要任务是崩溃恢复并使系统处于一致状态。

0 个答案:

没有答案