并行集合--IProducerConsumerCollection<T>

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>
URL链接:http://hxwzsj.com/article/gdceih.html

其他资讯

Copyright © 2025 青羊区翔捷宏鑫字牌设计制作工作室(个体工商户) All Rights Reserved 蜀ICP备2025123194号-14
友情链接: 成都响应式网站建设公司 app网站建设 营销网站建设 响应式网站设计方案 网站设计公司 外贸网站建设 成都网站建设 成都定制网站建设 广安网站设计 成都网站设计 成都网站建设 宜宾网站设计 网站建设方案 成都企业网站设计 成都网站设计 网站制作公司 成都网站建设推广 成都网站建设 成都定制网站建设 成都网站设计制作公司 企业网站设计 重庆网站建设