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(); });
适合大量线程做相同事情的适合来控制并发,蛮有用的
原文地址:https://www.cnblogs.com/RainbowInTheSky/p/9472342.html
时间: 2024-11-08 16:16:38