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<>。

  • 相关阅读:
    JS判断是否是ioS或者Android
    React+dva多图片上传
    Nginx的虚拟主机
    Nginx的动静分离
    Nginx的负载均衡
    Nginx的静态代理
    Java内存模型
    系统学习笔记漏掉的部分
    异常的统一处理
    webpack学习指南
  • 原文地址:https://www.cnblogs.com/zhuyongblogs/p/5752127.html
Copyright © 2011-2022 走看看