async和await学习笔记
结论:
(1)asyc方法的返回类型必须为:void、Task或者Task<T>。返回类型为Task的异步方法中无需使用return返回值,而返回类型为Task<TResult>的异步方法中必须使用return返回一个Tresult类型的值。
(2)await必须用来修饰Task或Task<TResult>(方法和对象),且只能出现在已经用async关键字修饰的异步方法中。
(3)在async标识的方法体里面,在await关键字出现之前,是由原线程顺序调用的,运行到await处就会调整执行顺序:await语句仍旧由原线程执行,直到遇到一个Task后新建一个线程执行Task任务。此时原线程将跳出async函数并执行其后代码;await语句的下一条语句至async函数结束之间的语句会被挂起,由新建的Task线程在跳出await语句后继续执行。await关键字本质上是是用于返回值是“可等待”类型(awaitable)的方法。
代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading; namespace TestConsole
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("线程ID:" + Thread.CurrentThread.ManagedThreadId + " -------主线程启动-------");
Task<int> task = OuterAsync();
Thread.Sleep();
Console.WriteLine("线程ID:" + Thread.CurrentThread.ManagedThreadId + " 主线程继续运行...");
Console.WriteLine("线程ID:" + Thread.CurrentThread.ManagedThreadId + " -------主线程结束-------"); Console.ReadLine();
} static async Task<int> OuterAsync()
{
Console.WriteLine("线程ID:" + Thread.CurrentThread.ManagedThreadId + " OuterAsync() Start"); string str = await TaskAsync();
Console.WriteLine("线程ID:" + Thread.CurrentThread.ManagedThreadId + " OuterAsync() End");
return str.Length;
} static Task<string> TaskAsync()
{
Console.WriteLine("线程ID:" + Thread.CurrentThread.ManagedThreadId + " TaskAsync() Start"); var result = Task<string>.Run(() =>
{
Thread.Sleep();
Console.WriteLine("线程ID:" + Thread.CurrentThread.ManagedThreadId + " Task Running...");
return "finished";
});
Console.WriteLine("线程ID:" + Thread.CurrentThread.ManagedThreadId + " TaskAsync() End");
return result;
}
}
}
分析:

async和await学习笔记的更多相关文章
- C# async await 学习笔记2
C# async await 学习笔记1(http://www.cnblogs.com/siso/p/3691059.html) 提到了ThreadId是一样的,突然想到在WinForm中,非UI线程 ...
- promise以及async、await学习总结
Promise/async.await帮我们解决了什么 它给我们提供了一种新的异步编程解决方案,同时避免了困扰已久的回调地狱 // 异步的处理可能会产生这样的回调地狱(第二个异步操作和第一个异步的结果 ...
- C# async await 学习笔记1
由于我的开发工具为vs.net 2010(.net 4.0),需先做以下两步才能进行: 1.下载并安装Async CTP (http://www.microsoft.com/en-us/downloa ...
- async/await学习笔记
async/await 的目的是简化使用 promises 的写法. 让我们来看看下面的例子: // 一个标准的 JavaScript 函数 function getNumber1() { r ...
- C#同步,异步的理解,包括5.0中await和async(学习笔记)
之前在工作中一直用的是同步线程,就是先进入画面的load事件,然后在里面进行数据库调用的处理.后面又遇到了公司软件中一些比较古老的代码,一开始在那块古老代码中增加机能的时候,我想用到数据库的数据给画面 ...
- 多线程编程学习笔记——async和await(一)
接上文 多线程编程学习笔记——任务并行库(一) 接上文 多线程编程学习笔记——任务并行库(二) 接上文 多线程编程学习笔记——任务并行库(三) 接上文 多线程编程学习笔记——任务并行库(四) 通过前面 ...
- 多线程编程学习笔记——async和await(二)
接上文 多线程编程学习笔记——async和await(一) 三. 对连续的异步任务使用await操作符 本示例学习如何阅读有多个await方法方法时,程序的实际流程是怎么样的,理解await的异步 ...
- 多线程编程学习笔记——async和await(三)
接上文 多线程编程学习笔记——async和await(一) 接上文 多线程编程学习笔记——async和await(二) 五. 处理异步操作中的异常 本示例学习如何在异步函数中处理异常,学习如何对多 ...
- C#线程学习笔记九:async & await入门二
一.异步方法返回类型 只能返回3种类型(void.Task和Task<T>). 1.1.void返回类型:调用方法执行异步方法,但又不需要做进一步的交互. class Program { ...
随机推荐
- C#爬取京东手机数据+PowerBI数据可视化展示
此系列博文链接 C#爬虫基本知识 Html Agility Pack解析html TODO: EF6中基本认识. EF6操作mysql MySQL乱码问题 C#爬虫 在开头贴一下github仓库地址, ...
- .NET MVC 学习笔记(六)— 数据导入
.NET MVC 学习笔记(六)—— 数据导入 在程序使用过程中,有时候需要新增大量数据,这样一条条数据去Add明显不是很友好,这时候最好就是有一个导入功能,导入所需要的数据,下面我们就一起来看一下导 ...
- 两台linux主机使用unison + inotify实现web文件夹同步
两台服务器同步数据 unison 是一款跨平台的文件同步对象,不仅支撑本地对本地同步,也支持通过SSH,RSH和Socket 等网络协议进行同步. unison 支持双向同步,你可以同A同步到B ,也 ...
- centos7 完整配置openvpn详情教程
1. 什么是OpenVpn OpenVPN 是一个用于创建虚拟专用网络加密通道的软件包,最早是由James Yonan编写的.OpenVPN允许创建的VPN使用公开密钥.电子证书.或者用户名/密码来进 ...
- 在MVC3中修改KindEditor实现上传图片到指定文件夹
KindEditor编辑器默认上传的图片文件夹,是根据系统时间自动生成的,图片是自动上传到这些文件夹里面,无法选择.如果要上传图片到指定文件夹,像相册一样管理图片,则需要扩展KindEditor编辑器 ...
- Git使用(1)
安装git完成后 1.首先配置你的用户信息,用于体现在你的提交记录中包含your name and your email git config --global user.name "you ...
- WPF 中textBox实现只输入数字
刚学到 通过本方法可以使文本框只能输入或复制入数字 对于数量类输入文本框比较有用 金额类只需小改动也可实现 以TextBox txtCount为例 添加TextChanged事件 代码如下 priv ...
- Linux 变量的使用
目录 1. Shell 脚本规范 2. Shell 脚本执行 3. Shell 脚本变量 3.1 环境变量 3.1.1 自定义环境变量 3.1.2 显示与取消环境变量 3.1.3 环境变量初始化与对应 ...
- Django使用Signals监测model字段变化发送通知
上一篇文章<运维效率之数据迁移自动化>中讲到了工单通知,本文将介绍工单通知实现过程中的一些小技巧.所有演示均基于Django2.0 阅读此篇文章你可以: 解锁一个python if的使用新 ...
- mycat ER 分片表
<table name="order" dataNode="dn$1-32" rule="mod-long"> <chil ...