深圳的网站建设公司电话,自助购物网站怎么做,管理方面的培训课程,做网站有什么类型BlockingCollection是一个比较冷门的类#xff0c;我们先看下官方对这个类的定义#xff1a;简单来说#xff0c;BlockingCollection就是一个线程安全的阻塞队列#xff0c;利用阻塞这个特性#xff0c;我们可以实现进程内的生产者-消费者模式#xff0c;比如消息转发、日… BlockingCollection是一个比较冷门的类我们先看下官方对这个类的定义简单来说BlockingCollection就是一个线程安全的阻塞队列利用阻塞这个特性我们可以实现进程内的生产者-消费者模式比如消息转发、日志记录等。下面我们看一个例子其用来实现消息转发先定义一个MessageDistributer类代码如下上面的代码很简单使用BlockingCollection定义一个消息队列然后使用AddMessage方法向队列中添加消息。重点看一下Process方法里面写了一个死循环里面调用BlockingCollection的Take方法当队列中如果没有消息时则阻塞队列所以并不会一直循环。等到有新消息进来时它就会继续处理。还有一个我们在这个类中使用单独的线程来作执行Process方法。我们再看一下调用的地方代码如下这里的代码就不多解释了就是实例化MessageDistributer类并开启线程然后接收客户端输入的消息我们运行一下看下效果。如下这个简单的例子就结束了大家可以按这个思路写个日志记录的类思路就是单独使用一个线程轮询阻塞队列。其实还可以将Action委托作为消息放到队列中这样可以实现一个任务执行器。代码如下到这里就可以说结束了不过我们可以利用ManualResetEvent来自己实现一个简单的阻塞队列如果你有兴趣可以接着往下看。ManualResetEvent使用信号来做线程间的通信当队列为空时我们一直阻塞着线程就行。简单实现一个代码如下上面的代码我就不多解释了也比较简单主要就是为队列的时候阻塞线程(WaitOne)添加项的时候发送信号(Set)。然后用自己封装的BlockingQueue替换消息转发类中BlockingCollection最后运行正常我就不再演示了。最后总结一下BlockingCollection这个类我们平时用的比较少如果你有在进程内用到消息订阅或单独开线程跑任务的场景时你可以留意一下它当然你也可以用Timer来实现。如果今天的内容能帮到你一点点就给个赞吧(关注就更好了)拜拜~~