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;
            }
        }
    }
  • 相关阅读:
    【Codeforces542E】Playing on Graph [Bfs][Dfs]
    【Codeforces441E】Valera and Number [DP]
    单链表快速排序
    一个简易内存池(C++)
    最长回文子串---Manacher算法
    hihocoder 1015题
    简单的字典树(前缀树)
    C++获取基类指针所指子类对象的类名
    Muduo阅读笔记---net(三)
    C++线程安全的单例模式
  • 原文地址:https://www.cnblogs.com/kuku/p/7358711.html
Copyright © 2011-2022 走看看