zoukankan      html  css  js  c++  java
  • C# async/await使用举例

    1、async/await几点总结

      a、被async标记的方法,返回值类型只能为voidTaskTask<T>。

      b、被async标记的方法,内部可以有await修饰符,表明内部逻辑某处有异步执行方法。

      c、被async标记的方法,内部可以没有await修饰符,所有逻辑将同步执行。

      d、task任务执行创建的线程为后台线程,主线如果不Task.result获取结果,主线程结束,异步任务未完成也结束。

      f、await关键字:方法要被async修饰,才能在方法内部使用await,await后面必须是一个task或返回task的方法,标记了await,就说明后面的操作是一个异步操作。

    2、应用实例

     1   static void Main(string[] args)
     2         {
     3             Console.WriteLine("主线程开始");
     4             Console.WriteLine("主线程ID:" + Thread.CurrentThread.ManagedThreadId);
     5             var task = GetLengthAsync();
     6             Console.WriteLine("主线程继续");
     7             var timer = new Stopwatch();
     8             timer.Start(); 
     9             Console.WriteLine("task的返回值是" + task.Result);
    10             timer.Stop();
    11             Console.WriteLine("耗时:" + timer.Elapsed.TotalSeconds + ""); //显示时间
    12             Console.WriteLine("主线程ID:" + Thread.CurrentThread.ManagedThreadId);
    13             Console.WriteLine("主线程结束");
    14         }
    15 
    16         private static async Task<int> GetLengthAsync()
    17         {
    18             Console.WriteLine("GetLengthAsync()开始");
    19             Console.WriteLine("GetLengthAsync()线程ID:" + Thread.CurrentThread.ManagedThreadId);
    20             var str = await GetStringAsync();
    21             Console.WriteLine("GetLengthAsync()线程ID:" + Thread.CurrentThread.ManagedThreadId);
    22             Console.WriteLine("GetLengthAsync()执行完毕");
    23             return str.Length;
    24             
    25         }
    26 
    27         private static Task<string> GetStringAsync()
    28         {
    29             Console.WriteLine("GetStringAsync()开始");
    30             Console.WriteLine("GetStringAsync()线程ID:" + Thread.CurrentThread.ManagedThreadId);
    31             Console.WriteLine("GetStringAsync()结束");
    32             return Task.Run(() =>
    33             {
    34                 Task.Delay(5000);
    35                 Console.WriteLine("异步任务开始执行");
    36                 Console.WriteLine("异步任务开始执行线程ID:" + Thread.CurrentThread.ManagedThreadId);
    37                 Console.WriteLine("异步任务耗时10s:");
    38                 Thread.Sleep(10000);
    39                 Console.WriteLine("异步任务执行完毕");
    40                 return "异步任务执行结果";
    41             });
    42             
    43         }

    运行结果显示。

    注释调9行结果显示。表明,主线程结束,异步任务未完成也结束。

    部分内容参考:https://www.cnblogs.com/sheng-jie/p/6471986.html

  • 相关阅读:
    编译mysql4.0时候出现错误提示checking "LinuxThreads"... "Not found"
    rhel5上使用源代码安装mysql4.0.x
    T400|X220打开AHCI的正确步骤
    MySQL主从同步、读写分离配置步骤
    Icc编译MySQL性能调研
    Java操作Hbase进行建表、删表以及对数据进行增删改查,条件查询
    hadoop 异常记录 ERROR: org.apache.hadoop.hbase.MasterNotRunningException: Retried 7 times
    创建代理访问.NET WebServices
    国际:2007年最令人失望的九大新兴技术
    黑客惊天发现:苹果能监视iPhone的一举一动
  • 原文地址:https://www.cnblogs.com/mojiejushi/p/13200748.html
Copyright © 2011-2022 走看看