原文:async和await用法

要理解async和await的用法,首先要了解Task相关知识,这里不做说明,因为这不是本文的重点。

如果你已经对Task很了解,那么如何使用async和await,在此主要总结了以下三点:

  1. 只有在async方法里面才能使用await操作符;
  2. await操作符是针对Task对象的;
  3. 当方法A调用方法B,方法B方法体内又通过await调用方法C时,如果方法C内部有异步操作,则方法B会等待异步操作执行完,才往下执行;但方法A可以继续往下执行,不用再等待B方法执行完。

对于第三点说的有点绕,所以下面结合代码说一下:

        static void Main(string[] args)
{
Test();
Console.WriteLine("Test End!");
Console.ReadLine();
} static async void Test()
{
await Test1();
Console.WriteLine("Test1 End!");
} static Task Test1()
{
Thread.Sleep();
Console.WriteLine("create task in test1"); return Task.Run(() =>
{
Thread.Sleep();
Console.WriteLine("Test1");
});
}

执行结果:

对结果解释是:

  Main方法调用具有async标示的Test方法,Test方法通过await调用Test1方法,当执行顺序执行到Test1时,遇到里面的异步操作;则Test方法会等待Test1里面的异步操作执行完再往下执行;但是Main方法,不用再等待Test方法执行,可以继续往下执行。


对于上面情况,可以不使用async和await也能实现,代码如下:

        static void Main(string[] args)
{
Test();
Console.WriteLine("Test End!");
Console.ReadLine();
} static void Test()
{
var test1=Test1(); Task.Run(() =>
{
test1.Wait();
Console.WriteLine("Test1 End!");
});
} static Task Test1()
{
Thread.Sleep(); Console.WriteLine("create task in test1"); return Task.Run(() =>
{
Thread.Sleep();
Console.WriteLine("Test1");
});
}

最后:这是我个人的理解和总结,欢迎大家来讨论或指教

async和await用法的更多相关文章

  1. async和await用法(Task)

    原文:async和await用法 要理解async和await的用法,首先要了解Task相关知识,这里不做说明,因为这不是本文的重点. 如果你已经对Task很了解,那么如何使用async和await, ...

  2. 浅谈async函数await用法

    今天状态不太好,睡久了懵一天. 以前只是了解过async函数,并还没有很熟练的运用过,所以先开个坑吧,以后再结合实际来更新下,可能说的有些问题希望大家指出. async和await相信大家应该不陌生, ...

  3. Thread&ThreadPool、Parallel、Async和Await用法总结

    1.线程和线程池Thread&ThreadPool //线程初始化时执行方法可以带一个object参数,为了传入自定义参数,所以执行需单独调用用于传参. Console.WriteLine(& ...

  4. C#中async和await用法

    .net 4.5中新增了async和await这一对用于异步编程的关键字. async放在方法中存在await代码的方法中,await放在调用返回Task的方法前. class Class1 { pr ...

  5. C# Async与Await用法

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  6. c# async和await 用法(阻塞与不阻塞)

    void PagePaint() { Console.WriteLine("Paint Start"); Paint(); Console.WriteLine("Pain ...

  7. 异步操作之 Promise 和 Async await 用法进阶

    ES6 提供的 Promise 方法和 ES7 提供的 Async/Await 语法糖都可以更好解决多层回调问题, 详细用法可参考:https://www.cnblogs.com/cckui/p/99 ...

  8. 反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑) C#中缓存的使用 C#操作redis WPF 控件库——可拖动选项卡的TabControl 【Bootstrap系列】详解Bootstrap-table AutoFac event 和delegate的分别 常见的异步方式async 和 await C# Task用法 c#源码的执行过程

    反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑)   背景介绍: 为了平衡社区成员的贡献和索取,一起帮引入了帮帮币.当用户积分(帮帮点)达到一定数额之后,就会“掉落”一定数量的“帮帮 ...

  9. Ext JS学习第十六天 事件机制event(一) DotNet进阶系列(持续更新) 第一节:.Net版基于WebSocket的聊天室样例 第十五节:深入理解async和await的作用及各种适用场景和用法 第十五节:深入理解async和await的作用及各种适用场景和用法 前端自动化准备和详细配置(NVM、NPM/CNPM、NodeJs、NRM、WebPack、Gulp/Grunt、G

    code&monkey   Ext JS学习第十六天 事件机制event(一) 此文用来记录学习笔记: 休息了好几天,从今天开始继续保持更新,鞭策自己学习 今天我们来说一说什么是事件,对于事件 ...

随机推荐

  1. 基于Hadoop技术实现的离线电商分析平台(Flume、Hadoop、Hbase、SpringMVC、highcharts)

    离线数据分析平台是一种利用hadoop集群开发工具的一种方式,主要作用是帮助公司对网站的应用有一个比较好的了解.尤其是在电商.旅游.银行.证券.游戏等领域有非常广泛,因为这些领域对数据和用户的特性把握 ...

  2. Error:The SDK Build Tools revision (19.0.3) is too low for project ':app'. Minimum required is 19.1.

    今天更新了一下AndroidStudio, 结果编译程序时报错, 错误如下: Error:The SDK Build Tools revision (19.0.3) is too low for pr ...

  3. 在ListView中实现排序

    此处介绍的情境是: (1)使用table布局ListView. (2)ListView的数据源是List<T>. (3)排序字段2个(帖子的回复次数和浏览次数),都是int类型. 基本思路 ...

  4. eclipse不能进入debug

    首先说明一下.我肯定是以debug模式启动的.断点程序肯定能走到. 可是一点页面,程序就跳到class文件,而不是Java文件. 解决的方法是:window---preferences---tomca ...

  5. 与众不同 windows phone (32) - Communication(通信)之任意源组播 ASM(Any Source Multicast)

    原文:与众不同 windows phone (32) - Communication(通信)之任意源组播 ASM(Any Source Multicast) [索引页][源码下载] 与众不同 wind ...

  6. hdu2066一个人的旅行

    枚举全部相邻城市,作为起点,多次spfa,然后每次在想去的城市中找出spfa后的距离起点最短的花费时间 #include <iostream> #include <cstring&g ...

  7. java学习笔记10--枚举

    java学习笔记10--枚举 在JDK1.5之前,java可以有两种方式定义新类型:类和接口.对于大部分面向对 象编程来说,这两种方法看起来似乎足够了,但是在一些特殊情况下,这些方法就不适合.例如,想 ...

  8. Python 实现的下载op海贼王网的图片(网络爬虫)

    没得事就爬一下我喜欢的海贼王上的图片 须要在d盘下建立一个imgcache目录 # -*- coding: utf-8 -*- import urllib import urllib2 import ...

  9. python语言学习3 ——第一个python程序

    输入exit即退出,这样写的缺点是没有保存已经写的代码,下次需要重新写

  10. uva :10123 - No Tipping(dfs + 几何力矩 )

    option=com_onlinejudge&Itemid=8&page=show_problem&category=109&problem=1064&mosm ...