static async Task DoStep()
{
  //step 1
Debug.WriteLine("DoStep Start thread id: " + System.Threading.Thread.CurrentThread.ManagedThreadId + "|" + System.Threading.Thread.CurrentThread.IsThreadPoolThread); await Task.Run(async () =>
{
  Debug.WriteLine("Task thread id: " + System.Threading.Thread.CurrentThread.ManagedThreadId + "|" + System.Threading.Thread.CurrentThread.IsThreadPoolThread);
});
//这里会出现线程上下文切换
  //如果 SynchronizationContext.Current is not null,就使用await之前的线程,与 step1保持一致,注意不要再挂起调用前的线程,否则会出现死锁。
  //如果 SynchronizationContext.Current is null,就使用线程池中处理await的线程,与 step1 不保持一致,注意在这之后不能直接使用UI控件,只能通过this.BeginInvoke调用。
  //如Task.Run之后配置 ConfigureAwait(false),就使用线程池中处理await的线程,与 step1 不保持一致,注意在这之后不能直接使用UI控件,只能通过this.BeginInvoke调用。
  Debug.WriteLine("DoStep End thread id: " + System.Threading.Thread.CurrentThread.ManagedThreadId + "|" + System.Threading.Thread.CurrentThread.IsThreadPoolThread); 
   Debug.WriteLine(SynchronizationContext.Current == null ? "null" : SynchronizationContext.Current.ToString());  
}

await 与 SynchronizationContext 关系的更多相关文章

  1. 执行上下文与同步上下文 | ExecutionContext 和 SynchronizationContext

    原文连接:执行上下文与同步上下文 - .NET 并行编程 (microsoft.com) 执行上下文与同步上下文 斯蒂芬 6月15日, 2012 最近,我被问了几次关于 ExecutionContex ...

  2. Why use async requests instead of using a larger threadpool?(转载)

    问: During the Techdays here in the Netherlands Steve Sanderson gave a presentation about C#5, ASP.NE ...

  3. winform和wpf里必知的多线程知识

    背景: 很多小伙伴经常在群里问线程的问题,平时我经常转一些视频教程这些人不看,我就自己写个总结吧 不过还是要注意的是,切换本来就不能太频繁,要一口气改. wpf的viewmodel就不需要UI线程,更 ...

  4. 译文: async/await SynchronizationContext 上下文问题

    async / await 使异步代码更容易写,因为它隐藏了很多细节. 许多这些细节都捕获在 SynchronizationContext 中,这些可能会改变异步代码的行为完全由于你执行你的代码的环境 ...

  5. 异步编程之Async,Await和ConfigureAwait的关系

    在.NET Framework 4.5中,async / await关键字已添加到该版本中,简化多线程操作,以使异步编程更易于使用.为了最大化利用资源而不挂起UI,你应该尽可能地尝试使用异步编程.虽然 ...

  6. Async,Await和ConfigureAwait的关系

    [转自]https://mp.weixin.qq.com/s/h10V-FshGoaQUWFPfy-azg 在.NET Framework 4.5中,async / await关键字已添加到该版本中, ...

  7. async/await到底该怎么用?如何理解多线程与异步之间的关系?

    前言 如标题所诉,本文主要是解决是什么,怎么用的问题,然后会说明为什么这么用.因为我发现很多萌新都会对之类的问题产生疑惑,包括我最初的我,网络上的博客大多知识零散,刚开始看相关博文的时候,就这样.然后 ...

  8. 抓住异步编程async/await语法糖的牛鼻子: SynchronizationContext

    长话短说,本文带大家抓住异步编程async/await语法糖的牛鼻子: SynchronizationContext 引言 C#异步编程语法糖async/await,使开发者很容易就能编写异步代码. ...

  9. C# Async await和Task的关系

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

随机推荐

  1. 相当有用的react+redux渲染性能优化原理

    学习地址:http://foio.github.io/react-redux-performance-boost/

  2. IIS配置文档

    IIS配置文档: 1.安装IIS.控制面板→程序→打开关闭Windows功能,Web管理服务和万维网服务都勾上. 2.部署网站:ASP.Net项目的发布:项目中点右键“发布”,选择“文件系统”,发布到 ...

  3. 网页效果分析 VCD分解

    VCD分解分为三部分: 1. view 视觉                   HTML + CSS 基本界面模板 2. controller 控制            javascript  内 ...

  4. spring容器启动的三种方式

    一.在Web项目中,启动Spring容器的方式有三种,ContextLoaderListener.ContextLoadServlet.ContextLoaderPlugin. 1.1.监听器方式: ...

  5. DCloud:temple

    ylbtech-DCloud: 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返回顶部   7.返回顶部   8.返回顶部   9.返回顶部   1 ...

  6. 2016.5.30实现透明Panel及控件置顶的方法

    想放置一个透明Panel在某控件上端,实现效果是可透过此Panel看见下面控件,但鼠标点击却无任何反应. 1.新建置自定义Panel类 using System; using System.Colle ...

  7. Java中自定义枚举(Enum)项的值,可设置为指定的值

    一.代码 package base.lang; /** * ClassName: StateEnum  * @Description: TODO * @author fuming * @date 20 ...

  8. hadoop-eclipse-plugin-2.6.0-cdh5.4.0 插件编译

    1.JDK配置 1) 安装jdk 2) 配置环境变量 JAVA_HOME.CLASSPATH.PATH等设置 2.Eclipse 1).下载eclipse-jee-juno-SR2.rar 2).解压 ...

  9. <c:set var="ctx" value="${pageContext.request.contextPath}" />的学习

    ${pageContext.request.contextPath},是获取当前根目录 set var="ctx",是给这个路径定义了一个变量,用的时候可以通过EL表达式获取:${ ...

  10. Tornado模板配置

    #!/usr/bin/env python # -*- coding:utf-8 -*- #tornado模板配置 import tornado.ioloop import tornado.web c ...