zoukankan      html  css  js  c++  java
  • C# BlockCollection

    1.BlockCollection集合是一个拥有阻塞功能的集合,它就是完成了经典生产者消费者的算法功能。

      它没有实现底层的存储结构,而是使用了IProducerConsumerCollection接口的几个集合作为底层数据接结构,例如:ConcurrentBag、ConcurrentStack、ConcurrentQueue,你可以在构造BlockCollection实例的时候传入这个参数,如果不指定的话,则默认使用ConcurrentQueue作为存储结构。


    2. 阻塞和退出

    //GetConsumingEnumberable() 方法是关键,这个方法会遍历集合去除数据,一旦集合空了,则阻塞自己,直到集合中又有了元素了在开始遍历
    foreach(string value in block.GetConsumingEnumberable()){} 

        2.1  如果集合中没有数据,forearch将会阻塞直到新数据出现;

        2.2  CompleteAdding()方法是直接不允许任 何元素被加入集合;

        2.3  当使用了CompleteAdding()方法后且集合内没有元素的时候,另一个属性IsCompleted此时会为True,这个属性可以用来判断是否当前集合内的所有元素都被处理完;

        2.4  当使用了CompleteAdding()方法后,对象停止往集合中添加数据,这时如果是使用GetConsumingEnumerable枚举的,那么这种枚举会自然结束,不会再Block住集合,这种方式最优雅,也是推荐的写法。但是如果是使用TryTake访问元素的,则需要使用 IsCompleted判断一下,因为这个时候使用TryTake会抛InvalidOperationException异常;

    阅读:http://www.cnblogs.com/chengxiaohui/articles/5672768.html

  • 相关阅读:
    C#语言和SQL Server数据库技术_My Bank银行系统
    C#语言和SQL Server数据库技术_深入C#的String类
    C#语言和SQL Server数据库技术_C#语法快速热身
    HTML_利用CSS3制作网页动画
    HTML_定位网页元素
    HTML_浮动
    HTML_盒子模型
    HTML_css3美化网页元素
    iview中select搜索
    第六章、Vue项目预热
  • 原文地址:https://www.cnblogs.com/gaobing/p/6008068.html
Copyright © 2011-2022 走看看