public class AsyncInSync
{
/// <summary>
/// 同步代码里有异步代码
///
///
/// 结果
/// Main Thread Before DelayAsync:1
/// DelayAsync Before Await Thread ID:1
/// DelayReturnTaskAsync Before Await Thread ID:1
/// Main Thread After DelayAsync:1
/// DelayReturnTaskAsync After Await Thread ID:4
/// DelayAsync After Await Thread ID:4
/// </summary>
static public void Test()
{
Console.WriteLine("Main Thread Before DelayAsync:" + Thread.CurrentThread.ManagedThreadId); DelayAsync(10000); Console.WriteLine("Main Thread After DelayAsync:" + Thread.CurrentThread.ManagedThreadId);
} /// <summary>
/// 异步代码里有异步代码
///
///
/// 异步方法里有同步代码执行顺序:
/// 1 当前线程:进入DelayAsync方法
/// 2 当前线程:同步执行Thread.Sleep(1000);
/// 3 当前线程:(发现async里有await)当前线程返回DelayAsync的调用方向下执行。
/// 4 其他线程:执行await后的函数和Thread.Sleep(2000);)
///
/// 在异步方法中:Await之前的执行还是调用的线程,Await之后的执行就是另一个线程了
/// 即:异步方法中,Await之前还是当前线程的同步方法
///
/// </summary>
/// <param name="ms"></param>
/// <returns></returns>
static async void DelayAsync(int ms)
{
Thread.Sleep(1000);
Console.WriteLine("DelayAsync Before Await Thread ID:" + Thread.CurrentThread.ManagedThreadId);
await DelayReturnTaskAsync(ms);
Console.WriteLine("DelayAsync After Await Thread ID:" + Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(2000);
} /// <summary>
/// 异步代码里有异步代码
/// </summary>
/// <param name="ms"></param>
/// <returns></returns>
static async Task DelayReturnTaskAsync(int ms)
{
Thread.Sleep(1000);
Console.WriteLine("DelayReturnTaskAsync Before Await Thread ID:" + Thread.CurrentThread.ManagedThreadId);
await Task.Delay(ms);
Console.WriteLine("DelayReturnTaskAsync After Await Thread ID:" + Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(2000);
} }

对于异步编程Await和Async的理解的更多相关文章

  1. C#异步编程のawait和async关键字来写异步程序

    一.await和async关键字 .Net平台不断推出了新的异步编程模型,在.net4.5中加入了关键字await和async,顾名思义,await是指方法执行可等待,即可挂起直到有结果(不是必须立即 ...

  2. .Net 多线程 异步编程 Await、Async和Task

    await和async简介   await和async是在C#5中引入,并且在.NetFramewor4.5以及.NetCore中进行了支持.主要是解决性能瓶颈,并且增强系统的响应能力. msdn关于 ...

  3. C#基础系列——异步编程初探:async和await

    前言:前面有篇从应用层面上面介绍了下多线程的几种用法,有博友就说到了async, await等新语法.确实,没有异步的多线程是单调的.乏味的,async和await是出现在C#5.0之后,它的出现给了 ...

  4. 【转】剖析异步编程语法糖: async和await

    一.难以被接受的async 自从C#5.0,语法糖大家庭又加入了两位新成员: async和await. 然而从我知道这两个家伙之后的很长一段时间,我甚至都没搞明白应该怎么使用它们,这种全新的异步编程模 ...

  5. [C#]剖析异步编程语法糖: async和await

    一.难以被接受的async 自从C#5.0,语法糖大家庭又加入了两位新成员: async和await. 然而从我知道这两个家伙之后的很长一段时间,我甚至都没搞明白应该怎么使用它们,这种全新的异步编程模 ...

  6. 走进异步编程的世界--async/await项目使用实战

    起因:今天要做一个定时器任务:五分钟查询一次数据库发现超时未支付的订单数据将其状态改为已经关闭(数据量大约100条的情况) 开始未使用异步: public void SelfCloseGpPayOrd ...

  7. 异步编程新方式async/await

    一.前言 实际上对async/await并不是很陌生,早在阮大大的ES6教程里面就接触到了,但是一直处于理解并不熟练使用的状态,于是决定重新学习并且总结一下,写了这篇博文.如果文中有错误的地方还请各位 ...

  8. 聊聊IOCP,聊聊异步编程

    *:first-child { margin-top: 0 !important; } .markdown-body>*:last-child { margin-bottom: 0 !impor ...

  9. 【.NET异步编程系列1】:await&async语法糖让异步编程如鱼得水

    前导 Asynchronous programming Model(APM)异步编程模型以BeginMethod(...) 和 EndMethod(...)结对出现. IAsyncResult Beg ...

随机推荐

  1. C语言数组,指针小案例

    /* ============================================================================ Name : hello.c Autho ...

  2. redis相关笔记(三.redis设计与实现(笔记))

    redis笔记一 redis笔记二 redis笔记三 1.数据结构 1.1.简单动态字符串: 其属性有int len:长度,int free:空闲长度,char[] bur:字符数组(内容) 获取字符 ...

  3. Delphi 字符串函数StrUtils单元AnsiLeftStr、AnsiRightStr、AnsiMidStr、AnsiContainsStr、AnsiContainsText、AnsiStartsStr、AnsiStartsText、AnsiEndsStr、AnsiEndsText、AnsiReplaceStr、AnsiReplaceText、AnsiResemblesText...

    引用单元 StrUtils 非 SysUtilsAnsiLeftStr.AnsiRightStr.AnsiMidStr.AnsiContainsStr.AnsiContainsText.AnsiSta ...

  4. 【JVM】Java 8 中的常量池、字符串池、包装类对象池

    1 - 引言 2 - 常量池 2.1 你真的懂 Java的“字面量”和“常量”吗? 2.2 常量和静态/运行时常量池有什么关系?什么是常量池? 2.3 字节码下的常量池以及常量池的加载机制 2.4 是 ...

  5. Reverse array

    数组颠倒算法 #include <iostream> #include <iterator> using namespace std; void reverse(int* A, ...

  6. PHP getcwd() 函数

    获取当前工作目录: <?phpecho getcwd()?> 结果: /home/php 定义和用法 getchwd() 函数返回当前工作目录. 语法 getcwd(); 技术细节 返回值 ...

  7. 2019 TCO Round 1B——[ 状压DP ]

    第一题是 EllysSki . 题意:给n个数,求两个方向的最长递减区间. 可以O(n). #include<cstdio> #include<cstring> #includ ...

  8. MySQL安装/卸载

    http://jishu8.cc/2017/02/06/55/ 检查端口是否冲突:netstat nao | findstr 3307  启动服务:services.msc

  9. CentOS 7.0 lamp

    CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙. 1.关闭firewall: systemctl stop firewalld.service #停止fir ...

  10. ASP.NET Core学习——6

    依赖注入DI ASP.NET Core的底层设计支持和使用依赖注入.ASP.NET Core应用程序可以利用内置的框架服务将它们注入到启动类的方法中,并且应用程序服务能够配置注入. 1.什么是依赖注入 ...