• C# Async与Await的使用


    这个是.NET 4.5的特性,所以要求最低.NET版本为4.5。

    看很多朋友还是使用的Thread来使用异步多线程操作,基本上看不见有使用Async、Await进行异步编程的。各有所爱吧,其实都可以。只要正确使用就行,不过还是写了这篇文章推荐大家使用Async、Await。 原因就是:可以跟写同步方法一样去异步编程。代码则就非常的清晰,就跟写普通的代码一样,不用关系如何去异步编程,也让很多初级程序员也能够异步编程了。下面是一个使用Thread 多线程实现的异步例子,以及一个使用Async与Await的异步例子,接下来我们再简单理解下Async与Await的相关技术说明。

    Thread多线程异步编程例子

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("主线程测试开始..");
            Thread th = new Thread(ThMethod);
            th.Start();
            Thread.Sleep(1000);
            Console.WriteLine("主线程测试结束..");
            Console.ReadLine();
        }
      
      
        static void ThMethod()
        {
            Console.WriteLine("异步执行开始");
            for (int i = 0; i < 5; i++)
            {
                Console.WriteLine("异步执行" + i.ToString() + "..");
                Thread.Sleep(1000);
            }
            Console.WriteLine("异步执行完成");
        }
    }

      以上代码运行效果如下图:

    使用Async与Await进行异步编程

    复制代码
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("主线程测试开始..");
            AsyncMethod();
            Thread.Sleep(1000);
            Console.WriteLine("主线程测试结束..");
            Console.ReadLine();
        }
     
        static async void AsyncMethod()
        {
            Console.WriteLine("开始异步代码");
            var result = await MyMethod();
            Console.WriteLine("异步代码执行完毕");
        }
     
        static async Task<int> MyMethod()
        {
            for (int i = 0; i < 5; i++)
            {
                Console.WriteLine("异步执行" + i.ToString() + "..");
                await Task.Delay(1000); //模拟耗时操作
            }
            return 0;
        }
    }
    复制代码

    运行效果:

    显而易见我们就跟写同步方法一样,完成了异步方法的编写,代码更清晰了。

    只有拥有async才能在其内部使用await关键字。异步方法可以具有Task、Task<>或void的返回类型;

    await关键字则是用于返回值是“可等待”类型(awaitable)的方法

  • 相关阅读:
    CentOS 6.9/7通过yum安装指定版本的Nginx
    Ubuntu 16.04安装uafred用于替代Alfred
    Alfred修改内置Terminal为iTerm
    CentOS 6.9下的iptables在本机用DNAT转发指定IP到内网IP无效的问题解决(127.0.0.1)
    Java在Service层异常封装
    Chrome无法播放m3u8格式的直播视频流的问题解决
    Caused by: java.net.UnknownHostException: localhost.localdomain: localhost.localdomain的问题解决
    macOS High Sierra 10.13正式版USB安装盘制作
    Maven打包排除某个资源或者目录
    mybatis实现变量定义,实现sql业务代码
  • 原文地址:https://www.cnblogs.com/wwwbdabc/p/11653099.html
Copyright © 2020-2023  润新知