C#多執行緒程式設計筆記(2.5)-使用CountDownEvent類
近來在學習Eugene Agafonov編寫的《C#多執行緒程式設計實戰》(譯),做些筆記也順便分享一下^-^
using System; using System.Threading; namespace CountDownEvent_Test { class Program { static void Main(string[] args) { Console.WriteLine("Starting two operations"); var t1 = new Thread(() => PerformOperation("Operation 1 is completed", 4)); var t2 = new Thread(() => PerformOperation("Operation 2 is completed", 8)); t1.Start(); t2.Start(); _countdown.Wait(); Console.WriteLine("Both operations have been completed"); _countdown.Dispose(); Console.ReadKey(); } static CountdownEvent _countdown = new CountdownEvent(2); static void PerformOperation(string message,int seconds) { Thread.Sleep(TimeSpan.FromSeconds(seconds)); Console.WriteLine(message); _countdown.Signal(); } } }
程式執行結果如下
當主程式啟動時,建立了一個CountdownEvent例項,在其建構函式中指定了當兩個操作完成時會發出訊號。然後我們啟動了兩個執行緒,當它們執行完成後會發出訊號。一旦第二個執行緒完成,主執行緒會從等待CountdownEvent的狀態中返回並繼續執行。針對需要等待多個非同步操作完成的情形,使用該方法的非常便利的。
然而這有一個重大的缺點。如果呼叫_countdown.Signal()沒達到指定的次數,那麼_countdown.Wait()將一直等待。請確保使用CountdownEvent時,所有執行緒完成後都要呼叫Signal方法。