由于GUI 应用程序 不能使用线程池的线程更新UI,只能使用 GUI 线程更新,所以在 await 前后需要保证是同一个 GUI 线程

ASP.NET 程序 的线程处理客户端请求的时候,需要假定客户端的语言文化和身份标识等,所以为了保证信息的统一性,await 前后 会用同一个线程来处理...

  那么,在 FCL 的 SynchronizationContext 就使用这样的线程模型来解决以上问题。因此偶尔也会带来一些问题:如下,

        protected void Page_Load(object sender, EventArgs e)
{
try
{
Task<string> t = GetPage();
//主线程等待异步方法结束
Response.Write(t.Result);
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
} private async Task<string> GetPage()
{
WebRequest req = WebRequest.Create("http://www.baidu.com/");
//线程返回
WebResponse resp = await req.GetResponseAsync();
//等待执行,但是永远执行不到,因为 需要同一个主线程执行,但是主线程在等待该方法执行结束, 死锁!!!
Stream stream = resp.GetResponseStream();
StreamReader reader = new StreamReader(stream);
return reader.ReadToEnd();
}

    由于很多应用程序不需要依赖特定的应用程序模型,所以避免使用SynchronizationContext 对象,所以用 ConfigureAwait() 方法解决死锁问题

    

         protected void Page_Load(object sender, EventArgs e)
{
try
{
Task<string> t = GetPage();
//主线程等待异步方法结束
Response.Write(t.Result);
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
} private async Task<string> GetPage()
{
WebRequest req = WebRequest.Create("http://www.baidu.com/");
//ConfigureAwait(false) 不依赖 线程处理模型,可用线程池线程唤醒状态机
WebResponse resp = await req.GetResponseAsync().ConfigureAwait(false);
Stream stream = resp.GetResponseStream();
StreamReader reader = new StreamReader(stream);
return reader.ReadToEnd();
}

最新文章

  1. [Nhibernate]SchemaExport工具的使用(二)——创建表及其约束、存储过程、视图
  2. XML文件操作(C#)
  3. eclipse for jee版配置tomcat
  4. Flex +WebService
  5. C++对象的JSON序列化与反序列化探索续-复杂对象的序列化与反序列化
  6. HTMLTestRunner生成空白resault.html
  7. SOA和微服务
  8. UVa 679 小球下落 简单模拟题,树
  9. 创建理想的SEQUENCE和自增长的trigger
  10. sass 与 less 的区别与学习
  11. app.config 配置多项 配置集合 自定义配置(4) 自动增加配置项到配置文件的两种方法
  12. Beta冲刺NO.7
  13. git 解决每次更新代码都要输入用户名密码的解决方案
  14. C# 创建Web项目时 可以选择的类型在不同VS版本下的对比
  15. 使用jquery实现文本框输入特效:文字逐个显示逐个消失反复循环
  16. Confluence 6 从站点首页集中访问面板
  17. 常见的排序算法(直接插入&amp;选择排序&amp;二分查找排序)
  18. Python推荐系统库--Surprise理论
  19. 008、Docker 组件如何协作(2018-12-25 周二)
  20. JAVA编程思想学习笔记3-chap7-9-斗之气3段

热门文章

  1. &quot;传成老树白茶&quot;献礼母亲节 邀市民品茗感受茶文化
  2. Sublime Text实用小技巧
  3. linux 下UGet闪退问题
  4. [Spring] Spring配置文件中特殊字符的规定
  5. 权限管理[Linux]
  6. LWIP总结
  7. iOS---FMDB数据升级
  8. 收集常用的.net开源项目
  9. D3中动画(transition函数)的使用
  10. nodejs复习03