我的工作可以分解为更小的任务,每个任务最多可能需要 30 分钟才能完成。任务完成后,必须运行清理任务。
每个任务都是 CPU 密集型操作,必须在单独的计算机上运行。
问题是我无法找到一种方法来知道所有任务何时完成。如何在 Service Fabric 中创建应用程序,以便在所有任务完成后可以运行额外的清理任务?
此外,如何才能使当任何任务失败或意外关闭时,向所有工作人员发送取消信号,然后调用清理任务?
最佳答案
您还可以使用 ServiceFabric Actors 来满足您的要求。
- 创建一个被触发来完成工作的中央“JobService”(例如托管 WebApi 的无状态服务)
- 创建一个将处理单个任务的“TaskActor”
- 在 ActorInterface 中发布取消 token
- 在“JobService”中,为每个任务指定一个唯一的 ID,并将其用作“ActorId”
- 在您的“JobService”中,等待参与者完成任务并在所有任务完成后触发清理。如果其中一个参与者抛出异常,您还可以取消其他参与者。
您可以查看分区概念,了解参与者如何分布在节点上。
根据您的场景,actorId 可以保持一致(例如 taskActor1、taskActor2)以重用资源,或者您可以使用 guid 使它们对于每个作业都是唯一的。
关于c# - 具有完成任务的服务结构任务队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46386243/