執行緒池建立和多執行緒等待
阿新 • • 發佈:2018-12-25
在部落格園看到一篇部落格 C# -- 使用執行緒池 ThreadPool 執行多執行緒任務 在這裡使用了執行緒池 雖然也實現了執行緒等待 但是執行緒等待實現的太死板 如果定義未知數量的執行緒池無法實現等待 ManualResetEvent數量已經定死 所有我在原本程式碼的基礎上做了一些修改
實現程式碼
static void Main(string[] args) { for (int i = 0; i < 5; i++) { //定義執行緒等待事件 ManualResetEvent mre = new ManualResetEvent(false); //加入集合 manualEvents.Add(mre); //使用匿名函式加入執行緒池 ThreadPool.QueueUserWorkItem( s => { Console.WriteLine("執行緒ID:{0},開始執行", Thread.CurrentThread.ManagedThreadId); Stopwatch stw = new Stopwatch(); stw.Start(); long result = SumNumbers(10000000); stw.Stop(); //在這裡傳送資訊 使用匿名函式的好處 不需要把mre傳入到方法裡 省去一些拆箱和裝箱操作 mre.Set(); Console.WriteLine("執行緒ID:{0},執行完成,執行結果:{1},執行用時{2},", Thread.CurrentThread.ManagedThreadId, result, stw.ElapsedMilliseconds); }, mre); } //等待所有資訊 WaitHandle.WaitAll(manualEvents.ToArray()); Console.WriteLine("所有執行緒執行完畢"); Console.ReadKey(); }
執行的方法
static long SumNumbers(int count)
{
long sum = 0;
for (int i = 0; i < count; i++)
{
sum += i;
}
Thread.Sleep(3000);
return sum;
}