zoukankan      html  css  js  c++  java
  • .NET4.5之初识async与await

    在.NET 4.5中,新推出的async、await关键字,可以帮助我们像写同步方法一样去写异步方法。许多新类库和既有类库都支持这种新型的异步语法(比如HttpClient、HttpServer、MemoryStream...),它们以类似ReadAsync、WriteAsync、SendAsync等分开方法来提供具有async声明,且返回类型为Task、Task<>的异步工作方式。

    简单测试代码:

    //引入
    using System.Threading;
    using System.Threading.Tasks;
    
    namespace AsyncDemo
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("测试开始,时间:" + DateTime.Now);
                Console.WriteLine("主线程ID:" + Thread.CurrentThread.ManagedThreadId);
    
                //这里分别调用同步/异步方法
                //Fun();
                FunAsync();
    
                Console.WriteLine("测试结束,时间:" + DateTime.Now);
                Console.Read();
            }
    
            //同步方法
            private static void Fun()
            {
                Thread.Sleep(2000);
                Console.WriteLine("同步方法线程ID:" + Thread.CurrentThread.ManagedThreadId);
            }
    
            //异步方法
            static async void FunAsync()
            {
                await Task.Run(() =>
                {
                    Thread.Sleep(2000);
                    Console.WriteLine("异步方法线程ID:" + Thread.CurrentThread.ManagedThreadId);
                });
            }
        }
    }

    测试结果如下:

    1、同步方法

    2、异步方法

    可以看出:

    1、同步方法线程ID跟主线程ID一致,异步方法线程ID跟主线程ID不是同一线程。

    2、从主线程时间上看,同步是阻塞,异步是非阻塞的。

    另外,异步方法有返回值时,返回类型为Task、Task<>。

  • 相关阅读:
    【Beta版本】冲刺-Day6
    【Beta版本】冲刺-Day5
    【Beta版本】冲刺-Day4
    【Beta版本】冲刺-Day3
    【Beta版本】冲刺-Day2
    【Beta版本】冲刺-Day1
    内存管理和虚拟内存
    C++11中的智能指针和锁的类型以及它们背后的RAII机制
    操作系统中面试时问到的相关知识点
    网络层(IP)相关知识
  • 原文地址:https://www.cnblogs.com/zhuyongblogs/p/5752127.html
Copyright © 2011-2022 走看看