c# - 具有完成任务的服务结构任务队列

标签 c# azure azure-service-fabric

我的工作可以分解为更小的任务,每个任务最多可能需要 30 分钟才能完成。任务完成后,必须运行清理任务。

enter image description here

每个任务都是 CPU 密集型操作,必须在单独的计算机上运行。

问题是我无法找到一种方法来知道所有任务何时完成。如何在 Service Fabric 中创建应用程序,以便在所有任务完成后可以运行额外的清理任务?

此外,如何才能使当任何任务失败或意外关闭时,向所有工作人员发送取消信号,然后调用清理任务?

最佳答案

您还可以使用 ServiceFabric Actors 来满足您的要求。

  • 创建一个被触发来完成工作的中央“JobService”(例如托管 WebApi 的无状态服务)
  • 创建一个将处理单个任务的“TaskActor”
    • 在 ActorInterface 中发布取消 token
  • 在“JobService”中,为每个任务指定一个唯一的 ID,并将其用作“ActorId”
  • 在您的“JobService”中,等待参与者完成任务并在所有任务完成后触发清理。如果其中一个参与者抛出异常,您还可以取消其他参与者。

您可以查看分区概念,了解参与者如何分布在节点上。

https://learn.microsoft.com/en-us/azure/service-fabric/service-fabric-reliable-actors-platform#service-fabric-partition-concepts-for-actors

根据您的场景,actorId 可以保持一致(例如 taskActor1、taskActor2)以重用资源,或者您可以使用 guid 使它们对于每个作业都是唯一的。

关于c# - 具有完成任务的服务结构任务队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46386243/

相关文章:

c# - 最佳优先搜索评价函数

c# - 单元测试中的 DeploymentItem 和 TestCleanup 冲突?

sql-server - 如何使用 GUID 从 SQL Server 表引用 Azure 表数据

c# - 如何让 ServiceFabric actor 在遥远的 future 消失

c# - 默认服务描述不能作为升级的一部分进行修改 将 EnableDefaultServicesUpgrade 设置为 true

c# - 如何找到两种类型中最小的可分配类型(重复)?

c# - 嵌套 INotifyPropertyChanged 类不起作用

azure - 使用托管身份时的存储帐户 SAS

c# - 是否可以使用 NETMF 对嵌入式设备进行编程以将 geochron 记录写入 Azure?

azure-service-fabric - 跨分区共享可靠集合