教你正确打开async/await关键字的使用

  这段时间在项目开发中看到了一些async/await的使用,在aspnet core的host组件源码中也看到了许多的async/await代码。在开发时,正确的使用了async/await是可以提高程序的性能。下面的代码教你正确的理解await关键字的暂停/阻塞方法调用:

static void Main(string[] args)
        {
            Console.WriteLine("-------主线程启动-------");
            var task = GetStrLengthAsync();
            Console.WriteLine("主线程继续执行");
            Console.WriteLine("Task返回的值: " + task.Result);
            Console.WriteLine("-------主线程结束-------");

            Console.Read();
        }

        static async Task<string> GetStrLengthAsync()
        {
            Console.WriteLine("GetStrLengthAsync方法开始执行");

            var str = await GetString();
            Console.WriteLine("GetString方法调用结束");

            var str1 =await GetStringOne();
            Console.WriteLine("GetStringOne方法调用结束");

            Console.WriteLine("GetStrLengthAsync方法执行结束");
            return str + "   ######   " + str1;
        }

     ///await关键字会暂停/阻塞其所在的方法,返回调用 await关键字所在的方法继续执行,而不是接着await关键字所在的代码处往下执行,注释下面的代码,查看运行结果即可确认。

      //static async Task<string> GetStrLengthAsync()
      //{
      // Console.WriteLine("GetStrLengthAsync方法开始执行");

 
  

      // var str = GetString();
      // Console.WriteLine("GetString方法调用结束");

 
  

      // var str1 = GetStringOne();
      // Console.WriteLine("GetStringOne方法调用结束");

 
  

      // Console.WriteLine("GetStrLengthAsync方法执行结束");
      // return await str + " ###### " + await str1;
      //}

static async Task<string> GetString()
        {
            Console.WriteLine("GetString方法开始执行");
            return await Task.Run(() =>
            {
                Thread.Sleep(2000);
                return "GetString的返回值";
            });
        }

        static async Task<string> GetStringOne()
        {
            Console.WriteLine("GetStringOne方法开始执行");
            return await Task.Run(() =>
            {
                Thread.Sleep(2000);
                return "GetStringOne的返回值";
            });
        }

await关键字会阻塞/暂停它所在的方法。根据结果即可判断:

        //主线程启动
        //GetStrLengthAsync方法开始执行
        //GetString方法开始执行
        //主线程继续执行
        //GetString方法调用结束
        //GetStringOne方法开始执行
        //GetStringOne方法调用结束
        //GetStrLengthAsync方法执行结束
        //Task返回的值: 
        //主线程结束



        //主线程启动
        //GetStrLengthAsync方法开始执行
        //GetString方法开始执行
        //GetString方法调用结束
        //GetStringOne方法开始执行
        //GetStringOne方法调用结束
        //GetStrLengthAsync方法执行结束
        //主线程继续执行
        //Task返回的值: 
        //主线程结束        

转载于:https://www.cnblogs.com/zhiyong-ITNote/p/9862137.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值