人人人人人人人人人人人人

c#

https://docs.microsoft.com/zh-cn/dotnet/standard/collections/thread-safe/blockingcollection-overview

BlockingCollection 概述

BlockingCollection<T> 是一个线程安全集合类,可提供以下功能:

  • 实现制造者-使用者模式。

  • 通过多线程并发添加和获取项。

  • 可选最大容量。

  • 集合为空或已满时通过插入和移除操作进行阻塞。

  • 插入和移除“尝试”操作不发生阻塞,或在指定时间段内发生阻塞。

  • 封装实现 IProducerConsumerCollection<T> 的任何集合类型

  • 使用取消标记执行取消操作。

  • 支持使用 foreach(在 Visual Basic 中,使用 For Each)的两种枚举:

    1. 只读枚举。

    2. 在枚举项时将项移除的枚举。

  public class BlockingTest
    {


        BlockingCollection<int> bc = new BlockingCollection<int>();
        public BlockingTest()
        {
            Task.Factory.StartNew(ProduceTask);
           // Task.Factory.StartNew(ConsumeTask);
        }

        private void ProduceTask()
        {
            foreach (var item in Enumerable.Range(1, 100))
            {
      
                bc.Add(item);  
                Console.WriteLine(string.Format("+++++++++++++: {0}", item) + "   total:" + bc.Count);
                Thread.Sleep(100);
            }
            bc.CompleteAdding();
        }

        private void ConsumeTask()
        {
            foreach (var item in bc.GetConsumingEnumerable())
            {
                Console.WriteLine(string.Format("---------------: {0}", item)+"   total:"+ bc.Count);
            }
        }
    }

  

posted @ 2021-07-19 15:35  wgscd  阅读(69)  评论(0编辑  收藏  举报