我有一份工作可以分解爲更小的任務,每個任務可能需要30分鐘才能完成。任務完成後,必須運行清理任務。完成任務的服務結構任務隊列
每個任務是必須在單獨的機器上運行的CPU密集型操作。
問題是,我找不到一種方法來知道所有任務何時完成。如何在Service Fabric中創建應用程序,以便在所有任務完成後可以運行額外的清理任務?
此外,我該如何做到這一點,當任何任務失敗或意外關閉,取消信號發送到所有工人,然後調用清理任務?
我有一份工作可以分解爲更小的任務,每個任務可能需要30分鐘才能完成。任務完成後,必須運行清理任務。完成任務的服務結構任務隊列
每個任務是必須在單獨的機器上運行的CPU密集型操作。
問題是,我找不到一種方法來知道所有任務何時完成。如何在Service Fabric中創建應用程序,以便在所有任務完成後可以運行額外的清理任務?
此外,我該如何做到這一點,當任何任務失敗或意外關閉,取消信號發送到所有工人,然後調用清理任務?
您也可以根據您的要求使用ServiceFabric Actor。
你可以看看分區的概念,看演員是如何分佈在你的節點上的。
根據你的情況下,actorIds可能是一致的(例如taskActor1,taskActor2)再利用的資源,或者你可以使用一個GUID,使他們獨特的每一項工作。
考慮使用事件驅動(或pub/sub)的方法。
「開始任務」可以通知預計有多少個子任務。每完成的任務都可以觸發一個事件。清理任務可以等待啓動事件和所有完成事件。清理完成後,如果需要,它可以通知監聽器本身。
以類似的方式,事件可以包含有關進度,失敗和取消的信息。
什麼過程開始這些任務。他們將在另一個節點上運行?使用什麼服務?我們在談論C#「任務」嗎?服務結構如何適合您的圖像? –
作業從外部服務開始。任務必須在單獨的工作人員上執行。例如,一個場景可能涉及10個作業,每個作業有100個任務,在40個節點的服務結構實例上。每個節點一次只能執行一項任務。工作人員將首先完成工作#1,然後是下一個40的前40個任務,最後執行最後的20個任務,並開始接下來的20個任務。 – Nican