国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C#并發編程(一)

2019-11-08 02:10:12
字體:
來源:轉載
供稿:網友
C#并發編程(一) 單線程處理、多線程處理、并行處理、異步處理
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Collections.Concurrent;using System.Threading;namespace 并發編程{    class PRogram    {        static ConcurrentQueue<Order> orderQueue = new ConcurrentQueue<Order>();        static void Main(string[] args)        {            ProductData<Order> productData = new ProductData<Order>(orderQueue);            Thread.Sleep(TimeSpan.FromSeconds(2));            //C#并發編程(一)            //單線程處理            //SingleThreadDo();            //多線程處理            //MutilThreadDo();            //并行處理            //ParallelDo();            //異步處理            AsyncDo();            while (true)            {                Thread.Sleep(TimeSpan.FromSeconds(1));                if (orderQueue.Count == 0)                {                    Console.WriteLine("訂單全部處理完成");                }            }        }        /// <summary>        /// 異步        /// </summary>        static void AsyncDo()        {            int maxTaskCount = 100;            int currentTaskCount = 0;            OrderMgr orderMgr = new OrderMgr();            Order order;            while (true)            {                if (orderQueue.TryDequeue(out order))                {                    Console.WriteLine("當前還剩:{0}", orderQueue.Count);                    while (currentTaskCount > maxTaskCount)                    {                    }                    var delegateAct = new Action(() => { orderMgr.SaveOrder(order); });                    delegateAct.BeginInvoke(new AsyncCallback(r =>                    {                        delegateAct.EndInvoke(r);                        Interlocked.Decrement(ref currentTaskCount);                    }), null);                    Interlocked.Increment(ref currentTaskCount);                }            }        }        /// <summary>        /// 并行處理        /// </summary>        static void ParallelDo()        {            OrderMgr orderMgr = new OrderMgr();            Order order;            while (orderQueue.Count > 0)            {                List<Order> orderList = new List<Order>();                if (orderQueue.TryDequeue(out order))                {                    orderList.Add(order);                    if (orderQueue.Count > 100)                    {                        for (int i = 0; i < 100; i++)                        {                            orderQueue.TryDequeue(out order);                            orderList.Add(order);                        }                    }                    //Parallel中的任務全部執行完成才會往下走                    Parallel.ForEach(orderList, (p) =>                    {                        orderMgr.SaveOrder(order);                        Console.WriteLine("當前還剩:{0}", orderQueue.Count);                    });                }            }        }        /// <summary>        /// 多線程處理        /// </summary>        static void MutilThreadDo()        {            int maxTaskCount = 100;            int currentTaskCount = 0;            OrderMgr orderMgr = new OrderMgr();            Order order;            while (orderQueue.Count > 0)            {                if (orderQueue.TryDequeue(out order))                {                    Console.WriteLine("當前還剩:{0}", orderQueue.Count);                    while (currentTaskCount > maxTaskCount)                    {                    }                    Task.Factory.StartNew(() =>                    {                        orderMgr.SaveOrder(order);                        Interlocked.Decrement(ref currentTaskCount);                    });                    Interlocked.Increment(ref currentTaskCount);                }            }        }        /// <summary>        /// 單線程處理        /// </summary>        static void SingleThreadDo()        {            OrderMgr orderMgr = new OrderMgr();            Order order;            while (orderQueue.Count > 0)            {                if (orderQueue.TryDequeue(out order))                {                    Console.WriteLine("當前還剩:{0}", orderQueue.Count);                    orderMgr.SaveOrder(order);                }            }        }    }    public class ProductData<T> where T : Order, new()    {        ConcurrentQueue<T> queue;        public ProductData(ConcurrentQueue<T> queue)        {            this.queue = queue;            Data();        }        private void Data()        {            for (int j = 0; j < 100; j++)            {                queue.Enqueue(new T                {                    ID = Guid.NewGuid(),                    NO = string.Format("J{0:00000000}", j)                });            }            var i = 1;            Task.Factory.StartNew(() =>            {                while (true)                {                    queue.Enqueue(new T                    {                        ID = Guid.NewGuid(),                        NO = string.Format("{0:00000000}", i)                    });                    i++;                    Thread.Sleep(TimeSpan.FromMilliseconds(100));//每1S生產10個訂單                }            });        }    }    public class Order    {        public Guid ID { get; set; }        public string NO { get; set; }    }    public class OrderMgr    {        public OrderMgr()        {        }        public string SaveOrder(Order order)        {            Console.WriteLine("訂單:" + order.NO + ",處理完成");            Thread.Sleep(TimeSpan.FromSeconds(2));//假設每個訂單的處理時間為2S            return order.NO;        }    }}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 通城县| 泸溪县| 宝应县| 项城市| 达尔| 石城县| 大洼县| 河北区| 长海县| 盘山县| 湘西| 梁河县| 博乐市| 青冈县| 新平| 大城县| 盐池县| 清流县| 仪征市| 通江县| 延庆县| 新泰市| 杂多县| 茌平县| 远安县| 比如县| 赤水市| 泸水县| 广州市| 项城市| 正蓝旗| 海晏县| 荣昌县| 得荣县| 建湖县| 白玉县| 新宁县| 华宁县| 澄城县| 隆化县| 黔西|