線程池如何等待所有線程執行結束


internal sealed class AClass
{
public int Method(int num)
{
Thread.Sleep(1000);
return num * num;

}
public void UsingCallback(int numToDo)
{
int[] squares = new int[numToDo];
AutoResetEvent done = new AutoResetEvent(false);

//在其他線程上執行任務
for(int n = 0; n < squares.Length; n++)
{
ThreadPool.QueueUserWorkItem(
obj => {
int num = (int)obj;
squares[num] = Method(num);

//最后一個任務,就讓主線程繼續運行
if(Interlocked.Decrement(ref numToDo) == 0)
{
done.Set();
}
},n);
}
//等待其他所有線程結束運行
done.WaitOne();

for(int n = 0; n < squares.Length; n++)
{
Console.WriteLine("Index{0},Square{1}", n, squares[n]);
}
}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM