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】(先进先出)*************************************
ConcurrentQueue cq = new ConcurrentQueue();
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】(先进后出)*************************************
ConcurrentStack cs = new ConcurrentStack();
for (int i = 0; i < 10; i++)
{
cs.Push(i);//将元素插入到顶部
}
int cs_result;
cs.TryPop(out cs_result);//弹出 并返回顶部元素
//****************************【ConcurrentQueue】*************************************
ConcurrentBag cb = new ConcurrentBag();
for (int i = 0; i < 10; i++)
{
cb.Add(i);//添加元素
}
int cb_result;
cb.TryTake(out cb_result);//移除并返回元素
//****************************【ConcurrentQueue】*************************************
ConcurrentDictionary cd = new ConcurrentDictionary();
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】*************************************
BlockingCollection bc = new BlockingCollection(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();
}
}
}
当前文章:并行集合--IProducerConsumerCollection<T>
浏览路径:
http://chengdu.cdxwcx.cn/article/gdceih.html