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);
} }

最新文章

  1. Lua 学习笔记(十)数据结构
  2. bzoj2141 树状数组套Treap树
  3. Python排序算法
  4. Lambda表达式和表达式树
  5. &lt;System.ServiceModel&gt;
  6. 基于 HTML5 的数据存储
  7. java初级开发一系列的工具安装配置
  8. abapGit分支策略
  9. MySQL聚集索引和非聚集索引
  10. SLAM+语音机器人DIY系列:(二)ROS入门——4.如何编写ROS的第一个程序hello_world
  11. C#工具:CSV文件转换帮助类
  12. Tomcat 部署项目的三种方法(转)
  13. 使用canvas实现一个圆球的触壁反弹
  14. 后端调用接口在通过webService发布 解决跨域问题
  15. Android 数据存储03之SQLite
  16. 如何在Windows环境下安装JDK
  17. mybatis 之parameterType=&quot;Long&quot;
  18. 高可用api接口网络部署方案
  19. 使用Django来处理对于静态文件的请求
  20. diff命令的参数详解和实例

热门文章

  1. ios微信分享的兼容性问题
  2. githup上传项目到仓库
  3. ambari安装hadoop
  4. Security Spring 配置
  5. 记一次引入less自己坑自己的坑....
  6. Python--前端之HTML
  7. php ceil()函数 语法
  8. 2019牛客多校第五场H - subsequence 2 拓扑
  9. SQL语句之-计算字段/分组
  10. Android程序中欢迎界面