async和await理解代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace Async和Await的立即
{
class Program
{
static void Main(string[] args)
{
TestMain();
}
static void TestMain()
{
Console.Out.Write("Start\n"); //TestMain 方法启动
GetValueAsync();
Console.Out.Write("End\n"); //TestMain 方法结束
Console.ReadKey();
}
/// <summary>
/// 获取异步返回值
/// </summary>
/// <returns></returns>
static async Task GetValueAsync()
{
Console.WriteLine("Task Start");
//使用async修饰的方法称之为异步方法,在异步方法中,在await关键字的修改的语句之前的代码,会通知执行.
//await关键字修饰的语句会异步执行,await关键字并且会阻塞await关键字修饰的语句块之后的代码(在异步方法之中的代码),直到
//await修饰的异步方法执行完毕,才会执行await修饰的语句块后面的语句(在异步方法之中的语句.)
await Task.Run(() =>
{
Thread.Sleep(1000);
for (int i = 0; i < 5; ++i)
{
Console.Out.WriteLine(String.Format("From task : {0}", i));
}
});
Console.Out.WriteLine("Task End");
}
/*
* 对上面的代码,我们可以这样理解:当主线程中有耗时任务时,我们将它写到一个异步方法中(GetValueAsync)
* 在异步方法GetValueAsync中存在await关键字,在GetValueAsync方法中,在await关键字之前的代码,都是在主线程中同步执行的.
* 当程序知道到异步方法中的await修饰符修饰的语句块时,开启一个线程去执行被await修饰的语句块(使其异步),并立即退出GetvalueAsync方法
* 继续向下执行,而await修饰的语句块(一个方法,一般是开启一个线程执行耗时任务的方法)后面的代码,则等待await方法执行完成之后,之后执行
* 我们可以理解成(异步方法拿到返回值,之后执行的语句.)
*/
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace Async和Await的立即
{
class Program
{
static void Main(string[] args)
{
TestMain();
}
static void TestMain()
{
Console.Out.Write("Start\n"); //TestMain 方法启动
GetValueAsync();
Console.Out.Write("End\n"); //TestMain 方法结束
Console.ReadKey();
}
/// <summary>
/// 获取异步返回值
/// </summary>
/// <returns></returns>
static async Task GetValueAsync()
{
Console.WriteLine("Task Start");
//使用async修饰的方法称之为异步方法,在异步方法中,在await关键字的修改的语句之前的代码,会通知执行.
//await关键字修饰的语句会异步执行,await关键字并且会阻塞await关键字修饰的语句块之后的代码(在异步方法之中的代码),直到
//await修饰的异步方法执行完毕,才会执行await修饰的语句块后面的语句(在异步方法之中的语句.)
await Task.Run(() =>
{
Thread.Sleep(1000);
for (int i = 0; i < 5; ++i)
{
Console.Out.WriteLine(String.Format("From task : {0}", i));
}
});
Console.Out.WriteLine("Task End");
}
/*
* 对上面的代码,我们可以这样理解:当主线程中有耗时任务时,我们将它写到一个异步方法中(GetValueAsync)
* 在异步方法GetValueAsync中存在await关键字,在GetValueAsync方法中,在await关键字之前的代码,都是在主线程中同步执行的.
* 当程序知道到异步方法中的await修饰符修饰的语句块时,开启一个线程去执行被await修饰的语句块(使其异步),并立即退出GetvalueAsync方法
* 继续向下执行,而await修饰的语句块(一个方法,一般是开启一个线程执行耗时任务的方法)后面的代码,则等待await方法执行完成之后,之后执行
* 我们可以理解成(异步方法拿到返回值,之后执行的语句.)
*/
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace Async和Await的理解2
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("主线程开始运行");
TestMain();
Console.WriteLine("主线程结束运行");
Console.ReadKey();
}
private static async void TestMain()
{
Console.WriteLine("等待耗时任务开始");
//获取异步之后的返回值,异步方法执行结束之后执行的业务逻辑
string asyncResult =await Fun(); //获取异步方法的返回值
Console.WriteLine("耗时任务执行完成,返回结果是{0}",asyncResult);
//进一步操作的业务逻辑
}
private static async Task<string> Fun()
{
Console.WriteLine("耗时任务开始");
string str = "10000000";
await Task.Run(() =>
{
bool b = true;
while (b)
{
if (Convert.ToInt32(str) != 0)
{
str = (Convert.ToInt32(str) - 1).ToString();
}
else
{
b = false;
}
}
Console.WriteLine("耗时任务结束");
});
return str;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace Async和Await的理解2
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("主线程开始运行");
TestMain();
Console.WriteLine("主线程结束运行");
Console.ReadKey();
}
private static async void TestMain()
{
Console.WriteLine("等待耗时任务开始");
//获取异步之后的返回值,异步方法执行结束之后执行的业务逻辑
string asyncResult =await Fun(); //获取异步方法的返回值
Console.WriteLine("耗时任务执行完成,返回结果是{0}",asyncResult);
//进一步操作的业务逻辑
}
private static async Task<string> Fun()
{
Console.WriteLine("耗时任务开始");
string str = "10000000";
await Task.Run(() =>
{
bool b = true;
while (b)
{
if (Convert.ToInt32(str) != 0)
{
str = (Convert.ToInt32(str) - 1).ToString();
}
else
{
b = false;
}
}
Console.WriteLine("耗时任务结束");
});
return str;
}
}
}
async和await理解代码的更多相关文章
- C# async 和 await 理解
C# async 和 await 理解 先假设如下场景: 主函数 Main,循环等待用户输入: 计算函数 Cal,耗时计算大量数据: class Test { static int Main(stri ...
- C# 中的Async 和 Await 的用法详解
众所周知C#提供Async和Await关键字来实现异步编程.在本文中,我们将共同探讨并介绍什么是Async 和 Await,以及如何在C#中使用Async 和 Await. 同样本文的内容也大多是翻译 ...
- await和async更多的理解
最近有不少网友提起await和async,呵呵,C# 5引进的语法糖. 这个语法糖还真不好吃,能绕倒一堆初学的朋友,在网上也有很多网友关于这块知识点的争论,有对有错,今天在这里把这个误区好好讲讲. 在 ...
- ES7前端异步玩法:async/await理解
在最新的ES7(ES2017)中提出的前端异步特性:async.await. 什么是async.await? async顾名思义是"异步"的意思,async用于声明一个函数是异步的 ...
- 第十五节:深入理解async和await的作用及各种适用场景和用法
一. 同步VS异步 1. 同步 VS 异步 VS 多线程 同步方法:调用时需要等待返回结果,才可以继续往下执行业务 异步方法:调用时无须等待返回结果,可以继续往下执行业务 开启新线程:在主线程之外 ...
- .net 中的async,await理解
理解: 1.async修饰的方法可理解为异步方法(必须要配合await,否则和普通方法无异)2.当async方法执行遇到await,则立即将控制权转移到async方法的调用者3.由调用者决定是否需要等 ...
- Ext JS学习第十六天 事件机制event(一) DotNet进阶系列(持续更新) 第一节:.Net版基于WebSocket的聊天室样例 第十五节:深入理解async和await的作用及各种适用场景和用法 第十五节:深入理解async和await的作用及各种适用场景和用法 前端自动化准备和详细配置(NVM、NPM/CNPM、NodeJs、NRM、WebPack、Gulp/Grunt、G
code&monkey Ext JS学习第十六天 事件机制event(一) 此文用来记录学习笔记: 休息了好几天,从今天开始继续保持更新,鞭策自己学习 今天我们来说一说什么是事件,对于事件 ...
- ES7前端异步玩法:async/await理解 js原生API妙用(一)
ES7前端异步玩法:async/await理解 在最新的ES7(ES2017)中提出的前端异步特性:async.await. 什么是async.await? async顾名思义是“异步”的意思,a ...
- C# 多线程(18):一篇文章就理解async和await
目录 前言 async await 从以往知识推导 创建异步任务 创建异步任务并返回Task 异步改同步 说说 await Task 说说 async Task 同步异步? Task封装异步任务 关于 ...
随机推荐
- C博客作业05—指针
1.本章学习总结 1.1思维导图 1.2本章学习体会及代码量学习体会 1.2.1 学习体会 理解了指针在代码中的使用方法,学会使用指针进行参数操作 学会了结构体的定义方式与结构体的使用 经过持续一个周 ...
- DOS文件操作命令
内部命令 COPY---文件固执命令 格式:COPY [源盘:][路径]<源文件名> [目标盘][路径]<目标文件名> 拷贝一个或多个文件到指定盘上 1)COPY是文件对文件的 ...
- hadoop-1.2.1-1.x86_64.rpm、jdk-7u45-linux-x64.tar.gz安装(64位)
一, 配置信息 机器是64位,所以操作系统.软件都是64位的. 操作系统:CentOS6.2(64位): Hadoop是hadoop-1.2.1-1.x86_64.rpm: JDK是jdk-7u4 ...
- dbus-launch(转)
*NAME* dbus-launch - Utility to start a message bus from a shell script dbus-launch - 从shell脚本启动一个消息 ...
- Windows文件共享,报错"该用户已禁用"解决方案
文章背景:学校机器有俩个用户think和adminsitrator.默认administrator禁用,think属于administrators组. 经排错得问题出现情况.因为同学们都是Think用 ...
- String 源码浅析————终结篇
写在前面 说说这几天看源码的感受吧,其实 jdk 中的源码设计是最值得进阶学习的地方.我们在对 api 较为熟悉之后,完全可以去尝试阅读一些 jdk 源码,打开 jdk 源码后,如果你英文能力稍微过得 ...
- python要点记录
1.字典:当存储的key数目在几万到几十万之间效率最高.
- [BZOJ 1056][HAOI2008]排名系统
传送门 \(\color{green}{solution}\) \(fhq \_treap\)模板题. 对于 \(+\) 操作,如果当前人不存在,那么直接加入;如果存在,那么先将他删除,再加入.复杂度 ...
- Eigenface与PCA人脸识别算法实验
简单的特征脸识别实验 实现特征脸的过程其实就是主成分分析(Principal Component Analysis,PCA)的一个过程.关于PCA的原理问题,它是一种数学降维的方法.是为了简化问题.在 ...
- HDU - 6096 处理后缀的字典树
题意:给定n个字符串,m次询问,每次询问多少个字符串前缀是pre且后缀是suf,前后缀不可相交 字典树同时存储前后缀,假设字符串长为len则更新2*len个节点,依次按s[0],s[len-1],s[ ...