C#异步编程简单的运用

Posted 乔安生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#异步编程简单的运用相关的知识,希望对你有一定的参考价值。

当一个方法中有很多复杂的操作的时候就可以使用异步编程。

假如说这一个方法中有很多复杂的操作,把每一个复杂的操作放到一个异步方法中。

原来程序需要这些方法,上一个执行完成之后,才能执行下一个操作。

但是使用异步的方法,可以把这些复杂的操作给肢解了,把每一个复杂的操作都放到一个异步方法中,然后同时执行这些复杂的操作。

        /// 在控制台中调用这个方法
        static void TaskWait()
        {
            //创建一个异步任务
            Task<int> task = new Task<int>(() =>
            {
                int aa = 0;
                Console.WriteLine("异步方法中执行操作开始");
                for (int i = 0; i < 1000; i++)
                {
                    aa += i;
                }
                Console.WriteLine("异步方法中执行操作结束");
                return aa;
            });
            //启动 System.Threading.Tasks.Task,并将它安排到当前的 System.Threading.Tasks.TaskScheduler中执行。
            task.Start();

            Console.WriteLine("主线程执行其他处理1");
            Console.WriteLine("主线程执行其他处理2");
            Console.WriteLine("主线程执行其他处理3");
            Console.WriteLine("主线程执行其他处理4");
            Console.WriteLine("主线程执行其他处理5");

            //等待任务的完成执行过程。
            task.Wait();
            //获得任务的执行结果
            Console.WriteLine("任务执行结果---" + task.Result.ToString());
        }

这样就可以把一些比较费时的操作拿出来,进行异步操作,就可以节省一部分时间。

当有多个很费时的操作的时候,并且下一个操作需要用到上一个操作返回结果的时候,可以使用下面的这种方式。

        /// 在控制台中调用这个方法
        static void TaskContinueWith()
        {
            //创建一个异步任务
            Task<int> task = new Task<int>(() =>
            {
                int aa = 0;
                Console.WriteLine("异步方法中执行操作开始");
                for (int i = 0; i < 1000; i++)
                {
                    aa += i;
                }
                Console.WriteLine("异步方法中执行操作结束");
                return aa;
            });
            //启动任务,并安排到当前任务队列线程中执行任务(System.Threading.Tasks.TaskScheduler)
            task.Start();
            Console.WriteLine("主线程执行其他处理1");
            Console.WriteLine("主线程执行其他处理2");
            Console.WriteLine("主线程执行其他处理3");
            Console.WriteLine("主线程执行其他处理4");
            Console.WriteLine("主线程执行其他处理5");
            //任务完成时执行处理。
            Task<int> cwt = task.ContinueWith(t =>
            {
                Console.WriteLine("第二个操作需要用到第一个操作的返回结果" + t.Result.ToString());
                int aa = 0;
                Console.WriteLine("第二个---异步方法中执行操作开始");
                for (int i = 0; i < 1000; i++)
                {
                    aa += i;
                }
                Console.WriteLine("第二个---异步方法中执行操作结束");
                return aa;
            });
            //cwt.Start();//这里不需要再启动这个Task方法了
            cwt.Wait();

            Console.WriteLine("第二个---异步方法的返回结果---" + cwt.Result.ToString());

        }

 

以上是关于C#异步编程简单的运用的主要内容,如果未能解决你的问题,请参考以下文章

C# :异步编程的注意点

一文说通C#中的异步编程

C#中await/async闲说

C#C# 5.0 新特性——Async和Await使异步编程更简单

C#异步编程

c#中的Task异步编程