您的位置:首页 > 其它

并行集合--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();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  集合 并行