弹来弹去跑马灯!

c#

1
https://docs.microsoft.com/zh-cn/dotnet/standard/collections/thread-safe/blockingcollection-overview<br><br><strong>BlockingCollection 概述</strong>

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

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

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

  • 可选最大容量。

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

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

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

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

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

    1. 只读枚举。

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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 @   wgscd  阅读(72)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示