码迷,mamicode.com
首页 > Windows程序 > 详细

C# Thread、delegate、Task三种异步进行对比

时间:2017-12-09 20:50:42      阅读:905      评论:0      收藏:0      [点我收藏+]

标签:委托   tree   实例   对比   速度   lin   ret   wait   null   

1.Thread 【线程】

不断创建 Thread 会消耗很大的cup 导致 异步效率变慢

2.delegate【委托异步】

由于需要不断的实例化 委托类 将会消耗cup 和 内存

3.Task 【结合  async】

这种是三种中性能最好的  较低的cup和内存损耗

下面是例子:

#region 委托异步 和  asycn 异步进行对比
        /// <summary>
        /// 运行
        /// </summary>
        /// <param name="count"></param>
        static void Run(int count)
        {

            // TestTreed(  count);
            TestAsycnTask(count);
         //   TestDelegate(count);

        }


        /// <summary>
        /// 损耗cup 而且创建速度慢
        /// </summary>
        /// <param name="count"></param>
        static void TestTreed(int count)
        {
            for (int i = 0; i < count; i++)
            {
                //  Console.WriteLine("开始计算");
                new Thread(a =>
                {
                    Console.WriteLine(i);
                }).Start();
            }
          

        }
        //***************Task 部分

        /// <summary>
        /// Task异步
        /// </summary>
        /// <param name="i"></param>
        /// <returns></returns>
        static async Task<int> AsyncTask(int i)
        {

            // await Task.Delay(1500);
            Console.WriteLine(i);
            return i;
        }

        /// <summary>
        /// 测试 asycn 只会消耗小部分 cup
        /// </summary>
        /// <param name="count"></param>
        static void TestAsycnTask(int count)
        {
            for (int i = 0; i < count; i++)
            {
              //  Console.WriteLine("开始计算");
                 AsyncTask(i);//直接就异步了
            }
            
        }


        //********************************委托部分

        private delegate int _delegate(int i);
        /// <summary>
        /// 因为创建  委托  所以会消耗内存  和cup
        /// </summary>
        /// <param name="count"></param>
        static void TestDelegate(int count)
        {
            for (int i = 0; i < count; i++)
            {
                var d = new _delegate(Delegte);
                var r = d.BeginInvoke(i, null, null);

            }
        }

        /// <summary>
        /// 委托函数
        /// </summary>
        /// <param name="i"></param>
        /// <returns></returns>
        static int Delegte(int i)
        {
            Console.WriteLine(i);
            return i;
        }

     

#endregion  


C# Thread、delegate、Task三种异步进行对比

标签:委托   tree   实例   对比   速度   lin   ret   wait   null   

原文地址:http://www.cnblogs.com/change4now/p/8012331.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!