C#多執行緒順序依賴執行控制
阿新 • • 發佈:2018-11-02
在開發過程中,經常需要多個任務並行的執行的場景,同時任務之間又需要先後依賴的關係。針對這樣的處理邏輯,通常會採用多執行緒的程式模型來實現。
比如A、B、C三個執行緒,A和B需要同時啟動,並行處理,且B需要依賴A完成,在進行後續的處理,C需要B完成後開始處理。
針對這個場景,使用了ThreadPool,ManualResetEvent等.net框架內建的類功能進行了模擬,實現程式碼如下:
public class MultipleThreadCooperationSample { public static ManualResetEvent eventAB = new ManualResetEvent(false); public static ManualResetEvent eventBC = new ManualResetEvent(false); public static int Main(string[] args) { //so called thread A ThreadPool.QueueUserWorkItem(new WaitCallback(d => { Console.WriteLine("Start A thread"); Thread.Sleep(4000); eventAB.Set(); })); //thread A ThreadPool.QueueUserWorkItem(new WaitCallback(d => { Console.WriteLine("Start B thread and wait A thread to finised."); eventAB.WaitOne(); Console.WriteLine("Process something within B thread"); Thread.Sleep(4000); eventBC.Set(); })); eventBC.WaitOne(Timeout.Infinite, true); //thread C ThreadPool.QueueUserWorkItem(new WaitCallback(d => { Console.WriteLine("From C thread, everything is done."); })); Console.ReadLine(); return 0; } }
執行結果如下: