zoukankan      html  css  js  c++  java
  • 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());
    
            }
  • 相关阅读:
    Oracle中job的使用详解
    Control File (二)重建CONTROLFILE --- NORESETLOG
    Oracle Analyze 命令 详解
    深入学习Oracle分区表及分区索引
    B树索引和位图索引的区别!
    RAID0_RAID1_RAID10_RAID5各需几块盘才可组建
    Oracle IO优化心得
    修改dbwr后台进程数量
    查看ORACLE执行计划的几种常用方法
    printf()格式化输出详解及echo带颜色输出
  • 原文地址:https://www.cnblogs.com/ansheng/p/5504211.html
Copyright © 2011-2022 走看看