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

109 阅读1分钟

异步编程(2)

上一章我们用的方法中用了 Task.Delay(1); 这个 Delay 是异步延迟,如果我们不需要用延迟,仅仅是使用异步,我们可以直接使用 Task.Run 用方法名作为参数进行异步。
核心代码

Task.Run(方法名);

也可以用 Lambda 的方式,可以用参数接收返回值。

Task.Factory.StartNew(() => 方法名(), TaskCreationOptions.LongRunning);

完整代码

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 = Task.Factory.StartNew(() => Statistics01(), TaskCreationOptions.LongRunning);
            //统计 2 类
            Console.WriteLine("开始统计 2 类");
            var num2 = Task.Run(Statistics02);
            //统计 3 类
            Console.WriteLine("开始统计 3 类");
            var num3 = Task.Run(Statistics03);
            var we = await num1 + await num2 + await num3;
            Console.WriteLine("结束统计");
        }

        /// <summary>
        /// 统计 1 
        /// </summary>
        /// <returns></returns>
        static int Statistics01()
        {
            //等待 20 秒
            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 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;
        }
    }
}

欢迎进qq群交流:704028989