• async 和await


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

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

    Thread多线程异步编程例子

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

    以上代码运行效果如下图

    Async Await

    使用Async与Await进行异步编程

    1. class Program
    2. {
    3.     static void Main(string[] args)
    4.     {
    5.         Console.WriteLine("主线程测试开始..");
    6.         AsyncMethod();
    7.         Thread.Sleep(1000);
    8.         Console.WriteLine("主线程测试结束..");
    9.         Console.ReadLine();
    10.     }
    11.  
    12.     static async void AsyncMethod()
    13.     {
    14.         Console.WriteLine("开始异步代码");
    15.         var result = await MyMethod();
    16.         Console.WriteLine("异步代码执行完毕");
    17.     }
    18.  
    19.     static async Task<int> MyMethod()
    20.     {
    21.         for (int i = 0; i < 5; i++)
    22.         {
    23.             Console.WriteLine("异步执行" + i.ToString() + "..");
    24.             await Task.Delay(1000); //模拟耗时操作
    25.         }
    26.         return 0;
    27.     }
    28. }

    运行效果:

    Async Await2

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

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

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

  • 相关阅读:
    python常用模块之random模块
    python常用模块之time&datetime模块
    on windows in superset sql lab error "module object has no attribute sigalrm"
    Superset安装出错 sqlalchemy.exc.InvalidRequestError: Can't determine which FROM clause to join from, ...
    Ubuntu16.04怎样安装Python3.6
    Ubuntu16.04切换python3和python2
    Python Set Literals
    odoo 分组视图下显示同一批次记录的总数
    Let's Encryt免费SSL证书申请[我司方案]
    nginx接入let's encrypt
  • 原文地址:https://www.cnblogs.com/liangxiaofeng/p/5853266.html
Copyright © 2020-2023  润新知