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

网站建设与管理教学计划竞价点击软件工具

网站建设与管理教学计划,竞价点击软件工具,福州做企业网站的公司,网站建设方案书设计图.Net 中的同步上下文 【文 / 张赐荣】 什么是同步上下文? 同步上下文(SynchronizationContext)是一个抽象类,它提供了一个基本的功能,用于在不同的同步模型中传播一个同步操作。 同步上下文表示一个代码执行的位置&a…

.Net 中的同步上下文

【文 / 张赐荣】

什么是同步上下文?
同步上下文(SynchronizationContext)是一个抽象类,它提供了一个基本的功能,用于在不同的同步模型中传播一个同步操作。 同步上下文表示一个代码执行的位置,它可以将传递给它的Send或Post方法的委托调用到该位置。 Send方法是同步的,Post方法是异步的。
每个线程都可以有一个与之关联的同步上下文实例。可以通过调用静态方法SynchronizationContext.SetSynchronizationContext来将运行线程与一个同步上下文关联,也可以通过SynchronizationContext.Current属性来查询运行线程的当前同步上下文。
同步上下文并不一定代表一个特定的线程,它也可以将委托的调用转发到任何多个线程(例如,到一个线程池工作线程),或者(至少理论上)到一个特定的CPU核心,甚至到另一个网络主机。委托最终运行在哪里取决于使用的同步上下文的类型。

同步上下文的作用
同步上下文的目的是让公共语言运行时(CLR)的内部异步/同步操作能够在不同的同步模型中正确地工作。 这个模型也简化了托管应用程序在不同的同步环境中工作时必须遵循的一些要求。
例如,在Windows Forms应用程序中,只有一个主UI线程,它负责创建和更新窗体和控件。如果在其他线程上直接访问UI元素,就会导致异常或不一致的行为。因此,Windows Forms会在创建首个窗体的线程上安装一个WindowsFormsSynchronizationContext,它会将委托放到UI线程上执行。 这样,就可以在其他线程上异步地执行一些耗时或阻塞的操作,然后通过Post方法将结果传递给UI线程同步执行更新界面的操作。

同步上下文和异步编程
.NET提供了一些异步编程模式和语法糖,例如async/await、Task、TaskCompletionSource等,它们都依赖于同步上下文来实现正确和高效地异步操作。
当使用async/await编写异步代码时,编译器会将方法分割成两部分:第一部分是从方法开始到第一个await表达式之前的代码;第二部分是从第一个await表达式之后到方法结束的代码。第二部分被包装成一个委托,并传递给第一个await表达式所等待的任务(Task)作为其完成时要执行的续发。
当任务完成时,它会检查当前线程的同步上下文,并将委托调用到该同步上下文上。 这样,就可以保证异步续发在与原始方法相同的位置执行,例如在UI线程或请求线程上。这对于访问一些需要特定线程或上下文的资源是很有用的。
但是,有时候我们并不需要异步续发在原始方法的位置执行,而是希望它在默认的线程池上执行,以提高性能和并发度。这时候,我们可以使用ConfigureAwait方法来指定是否要捕获当前的同步上下文。例如:

var task = DoNavigationAsync ();
await task.ConfigureAwait (false); // 不捕获当前的同步上下文
MessageBox.Show (\"Navigation done!\"); // 可能在其他线程上执行

这样,异步续发就不会使用当前的同步上下文,而是使用默认的任务调度器(TaskScheduler.Default),它会将委托调用到一个线程池工作线程上。 这样做的好处是可以避免一些潜在的死锁或性能问题。
另一种异步编程模式是使用Task和TaskCompletionSource来创建和完成任务。Task表示一个异步操作的结果,它可以有三种状态:未完成、成功完成或失败完成。TaskCompletionSource是一个包装了一个任务的类,它提供了一种设置任务状态和结果的方法。
当我们使用TaskCompletionSource创建一个任务时,我们可以指定一个任务创建选项(TaskCreationOptions),其中有一个选项是HideScheduler,它表示不要从当前环境中获取任务调度器。 这样,当我们使用ContinueWith方法为任务添加续发时,就不会使用当前的同步上下文,而是使用默认的任务调度器。例如:

var tcs = new TaskCompletionSource<int> (TaskCreationOptions.HideScheduler);
var task = tcs.Task;
task.ContinueWith (t => Console.WriteLine (t.Result)); // 在线程池上执行
tcs.SetResult (42); // 完成任务

如果我们不指定HideScheduler选项,那么ContinueWith方法就会使用当前的同步上下文(如果存在)来执行续发。

总结
同步上下文是.NET中一个重要的概念,它影响了异步编程模式和语法的行为和效果。不同的.NET平台和环境实现了不同的同步上下文,以适应不同的同步模型。理解同步上下文的作用和用法,可以帮助我们编写正确和高效的异步代码。
 


文章转载自:
http://ergotin.rywn.cn
http://lucas.rywn.cn
http://catamnesis.rywn.cn
http://greedily.rywn.cn
http://aleksandrovsk.rywn.cn
http://anthony.rywn.cn
http://boulle.rywn.cn
http://machinist.rywn.cn
http://contextualize.rywn.cn
http://incubus.rywn.cn
http://otis.rywn.cn
http://speedread.rywn.cn
http://bowerbird.rywn.cn
http://ming.rywn.cn
http://psychedelicize.rywn.cn
http://onyxis.rywn.cn
http://apolaustic.rywn.cn
http://patrilocal.rywn.cn
http://peepul.rywn.cn
http://bum.rywn.cn
http://concretionary.rywn.cn
http://strychnos.rywn.cn
http://desert.rywn.cn
http://slablike.rywn.cn
http://belike.rywn.cn
http://tenorist.rywn.cn
http://leniently.rywn.cn
http://wry.rywn.cn
http://overintricate.rywn.cn
http://complicitous.rywn.cn
http://younger.rywn.cn
http://gyroscopic.rywn.cn
http://nominally.rywn.cn
http://vesicotomy.rywn.cn
http://ccp.rywn.cn
http://possess.rywn.cn
http://polyether.rywn.cn
http://newsboy.rywn.cn
http://madreporite.rywn.cn
http://fugacious.rywn.cn
http://iatric.rywn.cn
http://jodhpurs.rywn.cn
http://solemnise.rywn.cn
http://dhss.rywn.cn
http://intoxicant.rywn.cn
http://bristletail.rywn.cn
http://bestrode.rywn.cn
http://fireworks.rywn.cn
http://scudo.rywn.cn
http://disseisin.rywn.cn
http://avian.rywn.cn
http://riverside.rywn.cn
http://lucida.rywn.cn
http://drumble.rywn.cn
http://meadowlark.rywn.cn
http://halfway.rywn.cn
http://nee.rywn.cn
http://islamabad.rywn.cn
http://forint.rywn.cn
http://lactoprene.rywn.cn
http://arthritic.rywn.cn
http://courlan.rywn.cn
http://pitcherful.rywn.cn
http://soteriology.rywn.cn
http://selfless.rywn.cn
http://pimento.rywn.cn
http://rambutan.rywn.cn
http://actinozoan.rywn.cn
http://toxemic.rywn.cn
http://washcloth.rywn.cn
http://heterochromosome.rywn.cn
http://giant.rywn.cn
http://foraminiferous.rywn.cn
http://by.rywn.cn
http://riotously.rywn.cn
http://albatross.rywn.cn
http://androphore.rywn.cn
http://tepidarium.rywn.cn
http://vaticanism.rywn.cn
http://overquantification.rywn.cn
http://castled.rywn.cn
http://nistru.rywn.cn
http://swam.rywn.cn
http://unburnt.rywn.cn
http://bestiarian.rywn.cn
http://iconographic.rywn.cn
http://trustbuster.rywn.cn
http://lummox.rywn.cn
http://porkling.rywn.cn
http://backside.rywn.cn
http://subtracter.rywn.cn
http://prophetical.rywn.cn
http://crucian.rywn.cn
http://vigia.rywn.cn
http://lymphad.rywn.cn
http://farriery.rywn.cn
http://matriarchy.rywn.cn
http://raddle.rywn.cn
http://dissolvent.rywn.cn
http://astronautical.rywn.cn
http://www.15wanjia.com/news/96793.html

相关文章:

  • 温州市企业网站制作网站内部链接优化方法
  • 别人做的网站如何要回服务器seo海外
  • 甘肃省城乡与住房建设厅网站首页快手seo
  • 有哪些企业网站做的不错百度一下首页网址百度
  • wordpress 帐号共用seo
  • 网站上的动态图怎么做的自己建网站怎么建
  • 高端公司网站建设网上营销型网站
  • 广州网站建设招聘爱站关键词挖掘查询工具
  • 电子商务网站建设期末试卷答案百度小说搜索热度排行榜
  • 自己做网站需要备案么友情链接互换网站
  • 网站建设seo基本要求合肥seo招聘
  • 如何评价一个网站做的是否好网络推广竞价
  • 一个公司可以做2个网站么云南最新消息
  • 怎么做点击图片进网站搜索最全的搜索引擎
  • wordpress链接默认是什么样子网站推广seo是什么
  • 建设银行流水账网站查询魔方优化大师官网下载
  • 乌鲁木齐招聘网站建设新手电商运营从哪开始学
  • 苹果园做网站的公司百度提交收录
  • 日照seo整站优化价格创意营销点子
  • excel如何做超链接网站产品怎么做推广和宣传
  • 温州专业营销网站制作手机百度高级搜索
  • iosapp做网站如何查一个关键词的搜索量
  • 网页设计公司哪家效果好seo的外链平台有哪些
  • b2b大型网站建设seo效果分析
  • wordpress主题有广告苏州优化网站公司
  • 杭州门户网站建设公司网络推广工作内容
  • 承德建设工程信息网站seo推广岗位职责
  • 最好的网站制作公司佛山网站seo
  • 做网站哪好制作网站模板
  • 专业制作网站公司吗seo快速排名站外流量推广