async和await用法(Task)
要理解async和await的用法,首先要了解Task相关知识,这里不做说明,因为这不是本文的重点。
如果你已经对Task很了解,那么如何使用async和await,在此主要总结了以下三点:
- 只有在async方法里面才能使用await操作符;
 - await操作符是针对Task对象的;
 - 当方法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(1000);
Console.WriteLine("create task in test1"); return Task.Run(() =>
{
Thread.Sleep(3000);
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(1000); Console.WriteLine("create task in test1"); return Task.Run(() =>
{
Thread.Sleep(3000);
Console.WriteLine("Test1");
});
}

async和await用法(Task)的更多相关文章
- async和await用法
		
原文:async和await用法 要理解async和await的用法,首先要了解Task相关知识,这里不做说明,因为这不是本文的重点. 如果你已经对Task很了解,那么如何使用async和await, ...
 - 反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑)  C#中缓存的使用  C#操作redis  WPF 控件库——可拖动选项卡的TabControl  【Bootstrap系列】详解Bootstrap-table  AutoFac  event 和delegate的分别  常见的异步方式async 和 await C# Task用法  c#源码的执行过程
		
反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑) 背景介绍: 为了平衡社区成员的贡献和索取,一起帮引入了帮帮币.当用户积分(帮帮点)达到一定数额之后,就会“掉落”一定数量的“帮帮 ...
 - 异步方法的意义何在,Async和await以及Task的爱恨情仇,还有多线程那一家子。
		
前两天刚感受了下泛型接口的in和out,昨天就开始感受神奇的异步方法Async/await,当然顺路也看了眼多线程那几个.其实多线程异步相关的类单个用法和理解都不算困难,但是异步方法Async/awa ...
 - Thread&ThreadPool、Parallel、Async和Await用法总结
		
1.线程和线程池Thread&ThreadPool //线程初始化时执行方法可以带一个object参数,为了传入自定义参数,所以执行需单独调用用于传参. Console.WriteLine(& ...
 - c# async和await 用法(阻塞与不阻塞)
		
void PagePaint() { Console.WriteLine("Paint Start"); Paint(); Console.WriteLine("Pain ...
 - 浅谈async函数await用法
		
今天状态不太好,睡久了懵一天. 以前只是了解过async函数,并还没有很熟练的运用过,所以先开个坑吧,以后再结合实际来更新下,可能说的有些问题希望大家指出. async和await相信大家应该不陌生, ...
 - C#中async和await用法
		
.net 4.5中新增了async和await这一对用于异步编程的关键字. async放在方法中存在await代码的方法中,await放在调用返回Task的方法前. class Class1 { pr ...
 - C# Async与Await用法
		
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
 - C# Thread、ThreadPool、Task、Invoke、BeginInvoke、async、await 汇总
		
本文将主要通过"同步调用"."异步调用"."异步回调"三个示例来讲解在用委托执行同一个"加法类"的时候的的区别和利弊. ...
 
随机推荐
- js20130114
			
01.js(FirstJavaScrpty)第一个个javascript 1. Document.write("");//这个是在页面上输出一段信息 ; 例如:document ...
 - |与|| ,&与&& 分别表示什么意思?
			
| & 表示位运算,针对数值进行的运算,例如 3 | 2 .78 & 99,其结果仍然应为值数 || && 表示逻辑运算,||表示或者的意思,&& 表示 ...
 - WPF 依赖属性和附加属性
			
依赖属性: 依赖属性就是自己没有值,通过Binding从数据源获得值,就是依赖在别人身上,拥有依赖属性的对象称为依赖对象. 依赖属性的值存在哪里? 在WPF运行时,维护了一个全局的Hashtable存 ...
 - io 流操作hdfs
			
hdfs 文件上传 本地 --------> 文件系统对象 --------> hdfs 文件系统 输入流 ...
 - [No0000189]改善C#程序的建议10:用Parallel简化Task
			
在命名空间System.Threading.Tasks下,有一个静态类Parallel简化了在同步状态下的Task的操作.Parallel主要提供了3个有用的方法:For.ForEach.Invoke ...
 - PP图和QQ图 检查2个数据集是否符合同一分布
			
1.QQ图检查2个数据集是否符合同一分布,Purpose:Check If Two Data Sets Can Be Fit With the Same Distribution PP图和QQ图 - ...
 - 2016年蓝桥杯省赛A组c++第4题(算法填空)
			
/* 排序在各种场合经常被用到. 快速排序是十分常用的高效率的算法. 其思想是:先选一个“标尺”, 用它把整个队列过一遍筛子, 以保证:其左边的元素都不大于它,其右边的元素都不小于它. 这样,排序问题 ...
 - nginx-upstream-bio/nio/netty-zuul2-apigateway-openresty-orange-lua-docker
			
upstream_addr等到走了一些弯路,才发现nginx的upstream本来就有一个upstream_addr的模块,一下子我觉得找到了方向,不过看这个变量的说明,发现它主要用在记录log上面, ...
 - swf 文件解析
			
public class TagTypes { // Flash 1 tags public static const TAG_END:uint = 0; ...
 - LeetCode 657 Robot Return to Origin 解题报告
			
题目要求 There is a robot starting at position (0, 0), the origin, on a 2D plane. Given a sequence of it ...