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; } } }
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步