zoukankan      html  css  js  c++  java
  • BlockingCollection 集合随记

    BlockingCollection 集合是一个并发安全的集合,而且设计用来实现类似于消息队列的功能,生产者、消费者模式。

    static void Main(string[] args)
    {
        BlockingCollection<string> list = new BlockingCollection<string>();
    
        // task1 是一个生产者,用来向 BlockingCollection 集合添加元素
        var task1 = Task.Factory.StartNew(() =>
        {
            Console.WriteLine("enter:");
            while (true)
            {
                string str = Console.ReadLine();
                if (str == "Q")
                {
                    list.CompleteAdding();
                    break;
                }
    
                if (str.IndexOf(",") != -1)
                {
                    string[] parts = str.Split(',');
                    foreach (var s in parts)
                        list.Add(s);
                }
                else
                    list.Add(str);
            }
        });
    
        // task2 和 task3 是消费者,从 BlockingCollection 集合中取出来元素来处理,
        // 使用 TryTake 方法从集合中取出一个元素,如果集合中没有元素则等待,直接有元素返回为止
        var task2 = Task.Factory.StartNew(() =>
        {
            ProcessItem();
        });
        var task3 = Task.Factory.StartNew(() =>
        {
            ProcessItem();
        });
    
        Task.WaitAll(task1, task2, task3);
        Console.WriteLine("OK");
    }
    
    private void ProcessItem()
    {
        while (true)
        {
            string str = string.Empty;
            if (list.TryTake(out str, -1))
            {
                Console.WriteLine(string.Format("TID:{0}, str:{1}", Thread.CurrentThread.ManagedThreadId, str));
            }
            else
            {
                Console.WriteLine("exit");
                break;
            }
        }
    }
  • 相关阅读:
    About Face 摘录
    断言的使用
    C#中值传递和引用传递
    C++技巧之断言Assert
    About Face 一 目标导向设计
    About Face 二 设计行为与形态
    C++中引用传递与指针传递区别
    一个新的时代SoLoMo
    离散数学笔记算法部分
    汪教授的离散数学20110308 谓词与量词2
  • 原文地址:https://www.cnblogs.com/kuku/p/7358711.html
Copyright © 2011-2022 走看看