• 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());
    
            }
  • 相关阅读:
    Can't initialize physical volume "/dev/sdb" of volume group "cinder-volumes" without -ff /dev/sdb: physical volume not initialized.
    openstack核心组件--neutron网络服务2(4)
    openstack部署cinder
    [转载]数字证书原理,公钥私钥加密原理
    [转载]签名、加密、证书的基本原理和理解
    [转载]各种加密算法比较
    [转载]对称加密DES和TripleDES
    [转载]oracle的加密和解密
    PLSQL 问题小记
    [转载]Java中的String,StringBuilder,StringBuffer三者的区别
  • 原文地址:https://www.cnblogs.com/ansheng/p/5504211.html
Copyright © 2020-2023  润新知