2013-12-20 113 views
2

如何同步執行多個任務?同步執行多個任務

我需要所有的任務才能繼續執行它們才能達到相同的指令。

每個任務都必須等待其他人在繼續之前達到該指令。

回答

5

聽起來你正在尋找Barrier

使多任務協同一種算法並行經過多個階段的工作。

,並

任務組通過一系列階段,其中每一個在其在給定的階段已經到達Barrier和隱含信號組等待所有其他人移動合作到達。同樣的Barrier可以用於多個階段。

(該在Barrier頁面上的示例顯示四項任務運行相同的代碼 - 但是這絕不是一個要求)

+0

Task.WaitAll和Barrier之間的區別是什麼? – Revious

+2

有了障礙,任務還沒有完成 - 在障礙通過後,他們仍然(每個)都有自己的工作繼續進行。使用'WaitAll',所有這些任務都已完成 - 如果還有更多工作要做(對於多任務),您需要創建一組新任務來完成這項工作。 –

1

如果你有各種不同的任務需要等待,那麼Task.WaitAll

如果很多相同任務的實例,然後parallel.foreach是一個容易等待運行它們。

+0

我可以使用Task.WaitAll從任務中等待所有其他人呢? – Revious

+1

Task.WaitAll和Barrier有不同的用法:Task.WaitAll將來自任務外部,保證它們已經完成,然後再進入主線程中的下一步。障礙給出了任務內部到達的「里程碑」,然後等待其他任務在繼續前進到同一點。這並不意味着任務完成,只是它達到了重要的一點。 –

+2

WaitAll()確實不允許「...他們可以繼續執行」 –