当前位置: 首页 > news >正文

网站怎样做才会被百度收录天津如何做百度的网站推广

网站怎样做才会被百度收录,天津如何做百度的网站推广,鸿星尔克品牌策划方案,开一个网站建设公司点击蓝字关注我们本文带大家抓住异步编程async/await语法糖的牛鼻子: SynchronizationContext。引言 C#异步编程语法糖async/await#xff0c;使开发者很容易就能编写异步代码。零散看过很多文章#xff0c;很多是填鸭式灌输 (有的翻译文还有偏差)。遵守以上冷冰冰的②③条的… 点击蓝字关注我们本文带大家抓住异步编程async/await语法糖的牛鼻子: SynchronizationContext。引言 C#异步编程语法糖async/await使开发者很容易就能编写异步代码。零散看过很多文章很多是填鸭式灌输 (有的翻译文还有偏差)。遵守以上冷冰冰的②③条的原则一般可确保异步程序按预期运作我们时常能在各大论坛看到同学们(因不遵守②③点)引发的死锁现场。由async/await引起的死锁现场 UI程序(WinForm、WPF)点击按钮触发一个HTTP请求用请求结果修改UI控件以下代码会引发deadlockpublic static async Taskstring GetJsonAsync(Uri uri) {using (var client  new HttpClient()){var jsonString  await client.GetStringAsync(uri);return jsonString;} }// 上层调用方法 public void Button1_Click(...) {var jsonTask  GetJsonAsync(...);textBox1.Text jsonTask.Result; } ASP.NET web程序从api接口发起HTTP请求返回请求的结果以下代码也会引发deadlockpublic static async Taskstring GetJsonAsync(Uri uri) {using (var client  new HttpClient()){var jsonString  await client.GetStringAsync(uri);return jsonString;} } // 上层调用方法 public class MyController : ApiController {public string Get(){var jsonTask  GetJsonAsync(...);return jsonTask.Result;} } ☺️ 解决以上死锁有两种编程方式不再混用异步/同步写法, 始终使用async/await语法糖编写异步代码对等待的异步任务应用ConfigureAwait(false)方法SynchronizationContext就是这类死锁的牛鼻子大多数时候SynchronizationContext是在异步编程后默默工作但了解这个对象对于理解sync/await工作原理、解决死锁大有裨益。本文会解释async/await工作机制SynchronizationContext在异步编程语法糖中的意义示例代码为什么会deadlock1.  await/async语法糖工作机制 微软提出Task线程包装类、 await/async语法糖简化了异步编程的方式第②步调用异步方法GetStringAsync时开启异步任务第⑥步遇到await关键字框架会捕获调用线程的同步上下文(SynchronizationContext)对象, 附加给异步任务同时控制权上交到上层调用函数第⑦步异步任务完成通过IO完成端口通知上层线程 第⑧步通过捕获的线程同步上下文执行后继代码块2. SynchronizationContext的意义 先看下MSDN中关于SynchronizationContext的定义提供在各种同步模型中传播同步上下文的基本功能。此类实现的同步模型的目的是允许公共语言运行库的内部异步/同步操作使用不同的同步模型正常运行。☹️这就不是人能看懂的解释我给出的解释是在线程切换过程中保存调用线程的上下文环境 用于在异步任务完成后使用此线程同步上下文执行后继代码。线程同步上下文的意义在哪大家都知道WinForm和WPF都有类似的原则长耗时的任务在后台进行将异步结果返回给UI线程 。(这难道就是ConfigureAwait方法默认传true的原因)此时就需要捕获UI线程的SynchronizationContext并将这个对象传入异步任务。public static void DoWork() {//On UI threadvar sc  SynchronizationContext.Current;ThreadPool.QueueUserWorkItem(delegate{//... async taskdo work on ThreadPool        sc.Post(delegate{// do work on the original context (UI)}, null);}); } SynchronizationContext表示代码运行的线程环境在异步编程中利用该对象切换代码执行环境。不同的.NET框架因各自独特的线程切换场景有不同的SynchronizationContext子类重写父类虚方法ASP.NET有AspNetSynchronizationContextWinForm有WindowsFormSynchronizationContextWPF 有DispatcherSynchronizationContextASP.NET Core、控制台程序不存在SynchronizationContextSynchronizationContext.CurrentnullAspNetSynchronizationContext维护了HttpContext.Current、用户身份和文化但在ASP. NET Core这些信息天然依赖注入故不再需要SynchronizationContext另一个好处是不再获取同步上下文对性能也是一种提升。因此对于ASP.NET Core程序ConfigureAwait(false)不是必需的然而在基础库时最好还是使用ConfigureAwait(false)因为你保不准上层会混用同步/异步代码。3. 引言代码为什么发生deadlock 观察引言代码控制权返回到上层调用函数时执行流使用Result/(Wait方法)等待任务结果Result/Wait()导致调用线程同步阻塞(等待任务完成) 而异步任务执行完成后会尝试利用捕获的同步上下文执行后继代码这样形成死锁。正因为如此我们提出两种方式解决死锁原调用函数始终使用await方法这样调用线程是异步等待任务完成后继代码可以在该线程同步上下文上执行对异步任务应用ConfigureAwait(false)方法ConfigureAwait(bool)true  表示尝试在捕获的原调用线程SynchronizationContext 中执行后继代码false 不再尝试在捕获的线程SynchronizationContext中执行后继代码。 ConfigureAwait(false)  能解决[因调用线程同步阻塞]引发的死锁但是同步阻塞没有利用异步编程的优点不是很推荐。归根到底这两种解决死锁的方式都是针对SynchronizationContextASP. NET Core和控制台程序因为捕获的SynchronizationContextnull, 会选择一个线程同步上下文来执行不会死锁。总结 微软为加快开发效率上着实费了心力.NET提供的await/async语法糖简化了异步编程方式,在异步编程中SynchronizationContext决定了后继代码在哪里执行的环境深入理解这个对象的背景和不同框架的实现方式能帮助我们避免编写死锁代码。# 更多精彩面试八股文你写过自定义任务调度器吗你管这叫线程安全?墙裂推荐这可能是CAP理论的最好解释全网最通透的“闭包”认知 · 跨越语言鹅厂二面Nginx回忆录实话实说只会.NET会让我们一直处于鄙视链、食物链的下游什么是云原生今天因为你的点赞让我元气满满
http://wiki.neutronadmin.com/news/415588/

相关文章:

  • 有什么免费的网站收废铁的做网站有优点吗
  • 做网站的公司排行有必要自建网站做导购吗
  • 新东阳建设集团网站nodejs做视频网站
  • 网站开发 前端 后端最好的销售管理系统
  • 破天网站定制网站实名审核中心
  • 西部数码创建子网站做自己移动端网站
  • 网站建设首选九零后网络网站建设80hoe
  • 企业网站必备模块17z一起做网站广州
  • 天津网站制作的公司黑龙江建设网官方网站监理查询
  • 手机网站源码 html5网站建设汇报书 ppt
  • 第一站商城建设购物网站多少钱
  • 公司 网站建设 会计科目网站建设维护视频教程
  • 商业网站建设开发手机wap网页设计
  • 门户营销型网站搭建网站搭建代码
  • 高端网站创建广州网站建设维护
  • 哪里做网站百度收录块宝安做网站信科
  • 网站开发适合女生吗租空间做网站
  • 百度站长工具网站提交网站关键词密度过高
  • 不建议网站如何购买网站域名
  • 平凉崆峒建设局网站北京做网站价格
  • 南沙定制型网站建设ftp上传网站之后怎么做
  • 加强门户网站建设与管理办法百度网址大全免费下载
  • 邮箱注册网站申请wordpress文章不能添加标签
  • 网站建设开发兴田德润seo是免费推广吗?
  • 泉州建设人才网站如何推销自己的产品
  • 广州做网站多wordpress 虎嗅2016
  • 网页设计跟网站建设的区别中国城乡建设厅网站首页
  • 查看网站开发商工业设计公司宣传语
  • 宿迁宿豫网站建设视频制作表情包
  • 如何分析网站竞争对手徐州领航装饰工程有限公司