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(",") != -)
{
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, -))
{
Console.WriteLine(string.Format("TID:{0}, str:{1}", Thread.CurrentThread.ManagedThreadId, str));
}
else
{
Console.WriteLine("exit");
break;
}
}
}
BlockingCollection 集合随记的更多相关文章
- C#的变迁史 - C# 4.0 之线程安全集合篇
作为多线程和并行计算不得不考虑的问题就是临界资源的访问问题,解决临界资源的访问通常是加锁或者是使用信号量,这个大家应该很熟悉了. 而集合作为一种重要的临界资源,通用性更广,为了让大家更安全的使用它们, ...
- 详解SQL集合运算
以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化. 本系列[T-SQL基础]主要是针对T-SQL基础的总结. [T-SQL基础]01.单表查询-几道sql查询题 ...
- 你真的知道.NET Framework中的阻塞队列BlockingCollection的妙用吗?
BlockingCollection集合是一个拥有阻塞功能的集合,它就是完成了经典生产者消费者的算法功能.一般情况下,我们可以基于 生产者 - 消费者模式来实现并发.BlockingCollectio ...
- Python全栈-magedu-2018-笔记10
第三章 - Python 内置数据结构 集set 约定 set 翻译为集合 collection 翻译为集合类型,是一个大概念 set 可变的.无序的.不重复的元素的集合 set定义 初始化 set( ...
- SQL Server进阶(七)集合运算
概述 为什么使用集合运算: 在集合运算中比联接查询和EXISTS/NOT EXISTS更方便. 并集运算(UNION) 并集:两个集合的并集是一个包含集合A和B中所有元素的集合. 在T-SQL中.UN ...
- INTERSECT(交集)集合运算
在集合论中,两个集合(记为集合A和B)的交集是由既属于A,也属于B的所有元素组成的集合. 在T-SQL 中,INTERSECT 集合运算对两个输入查询的结果集取其交集,只返回在两个查询结果集中都出现的 ...
- UNION(并集)集合运算
在集合论中,两个集合(记为集合A和B)的并集是一个包含集合A和B中所有元素的集合.换句话说,如果一个元素属于任何一个输入集合,那么它也属于结果集. 在T-SQL中,UNION 集合运算可以将两个输入查 ...
- Python入门篇-封装与解构和高级数据类型集合(set)和字典(dict)
Python入门篇-封装与解构和高级数据类型集合(set)和字典(dict) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.封装和结构 #!/usr/bin/env pytho ...
- sql server 交集,差集的用法 (集合运算)
概述 为什么使用集合运算: 在集合运算中比联接查询和EXISTS/NOT EXISTS更方便. 并集运算(UNION) 并集:两个集合的并集是一个包含集合A和B中所有元素的集合. 在T-SQL中.UN ...
随机推荐
- clipboard使用总结
官方网站:https://clipboardjs.com/ 使用总结:http://blog.csdn.net/hry2015/article/details/70941912
- VS2017 Intelligense C++ 设置的几个重点
1,高级-点到箭头的转换,用于指针操作 2,高级-成员列表筛选模式-一定要选[模糊],而不要选[智能] 这样在我们输入 vkphdfea就能检索到vkPhysicalDeviceFeatures, 而 ...
- shell编程——变量子串的常用操作
${#字符串} 返回字符串的长度 [root@localhost ~]# a=length [root@localhost ~]# echo ${#a} 6 ${字符串:位置x} 从位置x开始往后截取 ...
- doStartTag(),doEndTag()方法的执行
1 .TagSupport与BodyTagSupport的区别 TagSupport与BodyTagSupport的区别主要是标签处理类是否需要与标签体交互,如果需要交互的就用TagSupport,否 ...
- 在Ajax请求中什么时候用GET方式什么时候用POST方式?
当我们有大量数据要传送时最好的办法是一次发出多个只传递少量信息的Ajax调用时.如果你正用一个Ajax调用发送大量数据,那么最好是结束这种做法,因为这样做并不能节约时间. 因此,需要传送大量数据能成为 ...
- Android 定时重复启动弹出窗口。
本来想着用handlerpostdelay就可以实现,没想到演示后关闭应用居然报错. 后来想到是没有了activity. ((Activity)context).isFinishing() 可以传入c ...
- ubuntu 源码安装 lnmp 环境
准备篇 下载软件包 1.下载nginx http://nginx.org/download/nginx-1.2.0.tar.gz 2.下载pcre (支持nginx伪静态) ftp://ftp.cs ...
- H5 继承
继承 CSS的某些样式是具有继承性的,那么什么是继承呢?继承是一种规则,它允许样式不仅应用于某个特定html标签元素,而且应用于其后代.比如下面代码:如某种颜色应用于p标签,这个颜色设置不仅应用p标签 ...
- Python实现常见算法[3]——汉罗塔递归
#!/usr/bin/python # define three list var. z1 = [1,2,3,4,5,6,7,"1st zhu"] z2 = ["2st ...
- QUrl
QUrl Detailed Description The QUrl class provides a convenient interface for working with URLs. It c ...