复习篇_C#_编程概念(1)_异步编程(1)

109 阅读1分钟

异步编程(1)

使用 Async 和 Await 的异步编程
.net 官方文档中说讲的案例比较贴于生活便于理解。我这边做复习记录,就已日常编程需求做为案例。
官方文档参考下面链接:
docs.microsoft.com/zh-cn/dotne…

在工作中,有时候会遇到数据统计。我们的数据有很多分类。如果一个一个分类去处理的话,时间上来看就是累加的。如下面的代码:

using System;
using System.Threading;

namespace StudyRecordProject
{
    class Program
    {
        static void Main(string[] args)
        {
            //统计 1 类
            Console.WriteLine("开始统计 1 类");
            var num1 = Statistics01();
            //统计 2 类
            Console.WriteLine("开始统计 2 类");
            var num2 = Statistics02();
            //统计 3 类
            Console.WriteLine("开始统计 3 类");
            var num3 = Statistics03();
            // 统计全部结果
            var num0 = num1 + num2 + num3;
            Console.WriteLine(num0);
            Console.WriteLine("结束统计");
        }

        /// <summary>
        /// 统计 1 
        /// </summary>
        /// <returns></returns>
        static int Statistics01()
        {
            for (int i = 0; i < 10; i++)
            {
                Thread.Sleep(1000);
            }
            Console.WriteLine("我是统计 1 类,用时 10 秒");
            return 10;
        }

        /// <summary>
        /// 统计 2
        /// </summary>
        /// <returns></returns>
        static int Statistics02()
        {
            for (int i = 0; i < 20; i++)
            {
                Thread.Sleep(1000);
            }
            Console.WriteLine("我是统计 2 类,用时 20 秒");
            return 20;
        }

        /// <summary>
        /// 统计 3 
        /// </summary>
        /// <returns></returns>
        static int Statistics03()
        {
            for (int i = 0; i < 30; i++)
            {
                Thread.Sleep(1000);
            }
            Console.WriteLine("我是统计 3 类,用时 30 秒");
            return 30;
        }
    }
}

运行完上面的代码后,就需要 60 秒,那么我们用异步让上面的 3 件事 同时去做,这样就会大大的提升效率。

using System;
using System.Threading;
using System.Threading.Tasks;

namespace StudyRecordProject
{
    class Program
    {
        static async Task Main(string[] args)
        {
            //统计 1 类
            Console.WriteLine("开始统计 1 类");
            var num1 = Statistics01();
            //统计 2 类
            Console.WriteLine("开始统计 2 类");
            var num2 = Statistics02();
            //统计 3 类
            Console.WriteLine("开始统计 3 类");
            var num3 = Statistics03();
            // 统计全部结果
            var num0 = await num1 + await num2 + await num3;
            Console.WriteLine(num0);
            Console.WriteLine("结束统计");
        }

        /// <summary>
        /// 统计 1 
        /// </summary>
        /// <returns></returns>
        static async Task<int> Statistics01()
        {
            //等待 1 毫秒
            await Task.Delay(1);
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine(i);
                Thread.Sleep(1000);
            }
            Console.WriteLine("我是统计 1 类,用时 10 秒");
            return 10;
        }

        /// <summary>
        /// 统计 2
        /// </summary>
        /// <returns></returns>
        static async Task<int> Statistics02()
        {
            //等待 1 毫秒
            await Task.Delay(1);
            for (int i = 0; i < 20; i++)
            {
                Thread.Sleep(1000);
            }
            Console.WriteLine("我是统计 2 类,用时 20 秒");
            return 20;
        }

        /// <summary>
        /// 统计 3 
        /// </summary>
        /// <returns></returns>
        static async Task<int> Statistics03()
        {
            //等待 1 毫秒
            await Task.Delay(1);
            for (int i = 0; i < 30; i++)
            {
                Thread.Sleep(1000);
            }
            Console.WriteLine("我是统计 3 类,用时 30 秒");
            return 30;
        }
    }
}

用异步执行后,就只需要 30 秒即可,大大提升了效率。

欢迎进qq群交流:704028989