2013-03-26 15 views
2

如何持續監控一組線程,然後在結束後執行一些操作。如何持續監控一組線程,然後在它們結束後執行一些操作?

我的代碼如下:

int threadcount = 5; 

for (int i = 0; i < threadcount; i++) 
{      
    _azgetThread = new Thread(() => Getazuredata()); 
    _azgetThread.Start(); 
} 

在上述情況下5個線程(_azgetThread)創建,我想監視他們,知道他們什麼時候已經結束。

我熟悉_azgetThread.IsAlive,但在這種情況下有多個實例。

+0

你是什麼意思的監視器?你知道什麼時候完成了嗎? – 2013-03-26 18:14:19

+0

我的意思是知道他們什麼時候完成 – user1526912 2013-03-26 18:15:48

+1

Thread.Join會做到這一點。但是這阻止了線程「等待」。如果你有更具體的細節,請包括他們。 – 2013-03-26 18:16:26

回答

3

這裏的一個好的選擇是使用CountdownEvent。每個線程都可以在事件完成時設置事件,主線程可以檢查事件是否已設置,或者調用Wait

您始終可以使用相同的機制(檢查IsAlive),但需要將線程存儲在數組或List<Thread>中,而不是對所有5個線程使用單個變量。

也就是說,我還建議使用TPL代替單個線程。根據您的工作情況,您可以使用Parallel.ForParallel.ForEach來運行所有5個項目,甚至可以在一系列項目中使用PLINQ。如果您想保持相同的邏輯,則可以使用Task.Factory.StartNewTask.WhenAll安排一個任務,該任務將在5個初始任務完成時通知您。

+0

刪除我的答案,當我意識到它與這個重疊多少;相反,我只是在評論中提到這一點:你也可以使用Parallel.Invoke(),例如'Parallel.Invoke(action1,action2,action3,action4,action5);' – 2013-03-26 18:36:28

相關問題