zoukankan      html  css  js  c++  java
  • 任务Task系列之异步编程(async and await)

      异步:异步操作通常用于执行完成时间可能较长的任务,如打开大文件、连接远程计算机或查询数据库=异步操作在主应用程序线程以外的线程中执行。应用程序调用方法异步执行某个操作时,应用程序可在异步方法执行其任务时继续执行。

      异步与多线程的关系:我们已经知道, 异步和多线程并不是一个同等关系,异步是最终目的,多线程只是我们实现异步的一种手段。异步是当一个调用请求发送给被调用者,而调用者不用等待其结果的返回而可以做其它的事情。实现异步可以采用多线程技术或则交给另外的进程来处理。简单的说就是:异步线程是由线程池负责管理,而多线程,我们可以自己控制,当然在多线程中我们也可以使用线程池。

      异步示例:

     1 static void Main(string[] args)
     2         {
     3             Console.WriteLine(SumValue().Result);
     4             Console.ReadLine();
     5         }
     6 
     7         static async Task<Int32> SumValue()
     8         {
     9             Int32 result = 0;
    10             var t1 = NumValue(50);
    11             var t2 = NumValue(100);
    12             result = await t1 + await t2;
    13             return result;
    14         }
    15         static async Task<Int32> NumValue(Int32 n)
    16         {
    17             Int32 sum = 0;
    18             await Task.Run(() => {
    19                 for (int i = 0; i < n; i++)
    20                 {
    21                     sum += i;
    22                 }
    23             });
    24             return sum;
    25         }

      运行结果:

      

      注意:

    • 凡是使用await关键字的方法,都必须打上async标记。
    • async表示方法内有异步方法,调用async方法,会立刻另起线程执行。
    • await只是显示等待线程结束。await表示等待异步方法执行完,并取返回值。
  • 相关阅读:
    ACM中java的使用
    hdu 1273最大流
    1066N !最右边非零数
    关于为什么要建退边的原因
    浅析指向指针的指针其作用
    poj 1860 bellman 求正环
    poj 3461
    poj 2031
    poj 1068
    strncpy的用法
  • 原文地址:https://www.cnblogs.com/mohanchen/p/9403861.html
Copyright © 2011-2022 走看看