并行集合--IProducerConsumerCollection<T>
2014-09-10 21:46
176 查看
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Collections; using System.Collections.Concurrent; using System.Threading; namespace ConsoleApplication5 { class Program { static void Main(string[] args) { //****************************【ConcurrentQueue<T>】(先进先出)************************************* ConcurrentQueue<int> cq = new ConcurrentQueue<int>(); for (int i = 0; i < 10; i++) { cq.Enqueue(i);//将元素添加到结尾处 } int cq_result; cq.TryDequeue(out cq_result);//尝试移除开始处的元素,成功返回true cq.TryPeek(out cq_result);//访问开始处的元素,不移除 //****************************【ConcurrentQueue<T>】(先进后出)************************************* ConcurrentStack<int> cs = new ConcurrentStack<int>(); for (int i = 0; i < 10; i++) { cs.Push(i);//将元素插入到顶部 } int cs_result; cs.TryPop(out cs_result);//弹出 并返回顶部元素 //****************************【ConcurrentQueue<T>】************************************* ConcurrentBag<int> cb = new ConcurrentBag<int>(); for (int i = 0; i < 10; i++) { cb.Add(i);//添加元素 } int cb_result; cb.TryTake(out cb_result);//移除并返回元素 //****************************【ConcurrentQueue<T>】************************************* ConcurrentDictionary<string, string> cd = new ConcurrentDictionary<string, string>(); cd.TryAdd("a", "曹操"); cd.TryAdd("b", "关羽");//添加键值 string cd_result; cd.TryGetValue("a", out cd_result);//获取该键对应的值 Console.WriteLine(cd.TryUpdate("a", "刘备", "曹操"));//指定键的值与第三个参数比较,相同则把第二个参数赋值给该键 string del_result; cd.TryRemove("a", out del_result);//删除并返回该键对应的值 //****************************【BlockingCollection<T>】************************************* BlockingCollection<int> bc = new BlockingCollection<int>(cb); bc.Add(1);//添加 foreach (var item in bc) { //Console.WriteLine(item+","+bc.Take());//查看 } //****************************【并行循环Parallel.For, Parallel.ForEach,Parallel.Invoke】************************************* //----------------------------------Parallel.For Parallel.For(0, 30, (r, s) => { // 当某一个循环单元的数大于5, // 则跳出当前执行单元,等待其他执行单元结束 // 所有执行单元结束后退出Parallel.For的执行 if (r > 5) { Console.WriteLine("a:" + r); s.Break();//跳出当前单元 } Console.WriteLine("b:" + r); }); //----------------------------------Parallel.ForEach Parallel.ForEach(new int[] { 1, 2, 3, 4 }, (r, s) => { Console.WriteLine(r); s.Stop();//停止,并推出Parallel.ForEach }); //----------------------------------Parallel.Invoke Parallel.Invoke(() => Console.WriteLine(123) ,()=>Console.WriteLine(321));//并行执行多个委托 Console.ReadKey(); } } }
相关文章推荐
- <java API源码初体验>2---collection集合之LinkedList原理分析
- 可观察的集合---ObservableCollection<T>
- 黑马程序员_Java集合-Collection<T>接口
- <java API源码初体验>4---collection集合之HashSet原理分析
- Java框架集合:Collection<E>、Iterable<T>和Iterator<E>接口
- 如何反射创建泛型集合,例如Collection<T>,
- Java8 新特性之集合: forEach(Consumer<? super T> action)
- Java中集合(一)Collection 、List<E> 、ArrayList<E>
- Hibernate逍遥游记-第12章 映射值类型集合-002映射Bag(<idbag><collection-id>)
- UWP ObservableCollection<Evaluate>集合中ObservableCollection<PictureInfo>变更通知到xaml界面
- <java API源码初体验>3---collection集合之HashMap原理分析
- <java API源码初体验>1---collection集合之ArrayList原理分析
- 控件包含代码块(即 <% ... %>),因此无法修改控件集合 asp.net
- Java集合归纳-<一>集合概述
- Collection -> 集合的同步执行
- 控件包含代码块(即 <% ... %>),因此无法修改控件集合
- MyBatis中<resultMap>的<association>和<collection>标签的使用
- Struts2中表达式集合对象List<T>与对象<T>的取值时遇到的变量名的问题
- Java 集合深入理解(4):List<E> 接口
- JAVA集合知识点汇总<二> Set集合