国产探花免费观看_亚洲丰满少妇自慰呻吟_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;        }    }}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 尼勒克县| 柞水县| 西宁市| 许昌县| 福鼎市| 富川| 山阴县| 宾川县| 依安县| 德安县| 苏尼特右旗| 皮山县| 吉木萨尔县| 肥西县| 永新县| 东乡县| 金秀| 太湖县| 海口市| 绍兴县| 股票| 阳朔县| 玉山县| 五指山市| 海淀区| 平阳县| 桂林市| 咸丰县| 嘉禾县| 凤翔县| 肃宁县| 汾阳市| 阿城市| 洛阳市| 老河口市| 新绛县| 鄢陵县| 庆云县| 旬阳县| 承德县| 胶南市|