private AutoResetEvent exitEvent; private void ProcessA() { while (true) { Console.WriteLine("do some thing"); if (exitEvent.WaitOne(waitTime)) { break; } } Console.WriteLine("exit"); } exitEvent.Set();
private void ProcessB() { while (true) { Console.WriteLine("do some thing"); Thread.Sleep(waitTime) } }
關於線程小模型,出現兩個處理的函數,一個是簡單的Sleep等待,一個是信號量,可是都有一個缺陷,就是不論是那個都在執行的時候(do some thing)沒法退出。信號量好一些,在等待的時候能夠控制退出,Sleep的話只能引起Exception來退出(或者在While設置flag,可是也同樣)。多線程
public SemaphoreSlim semaphoreSlim = new SemaphoreSlim(10);//併發限制爲10
在多線程的模型裏能夠控制線程數量來控制併發併發
semaphoreSlim.Wait(); ThreadPool.QueueUserWorkItem(t => { Console.WriteLine("do some thing"); semaphoreSlim.Release(); });
適合大量線程作相同事情的適合來控制併發,蠻有用的函數