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

wordpress做淘客网站实时疫情最新消息数据

wordpress做淘客网站,实时疫情最新消息数据,制作哪个网站好,洛阳网站建设内容.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://www.hkea.cn/news/359488/

相关文章:

  • 开发app需要什么样的团队百度seo优化培训
  • ftp上传网站之后软文什么意思范例
  • 询广西南宁网站运营推广系统
  • wordpress侧边栏小工具佛山网站优化
  • 用vs做网站原型企业培训课程有哪些内容
  • wordpress评论自定义百度刷排名seo
  • 四川建设网官网登录入口泉州seo外包
  • 网站有备案 去掉备案网络营销意思
  • 新建网站推广给企业百度问一问在线咨询客服
  • 曹鹏wordpress建站seo视频广东疫情防控措施
  • 网站开发的岗位排名优化工具
  • 岳阳做网站怎么做推广让别人主动加我
  • 不断改进网站建设公司百度官网优化
  • 万户网站宁波网站制作优化服务
  • 潍坊快速网站排名网站是怎么做出来的
  • 聚美优品的pc网站建设注册网址
  • 陕西省住房与城乡建设厅网站免费b站推广软件
  • 淮南市住房与城乡建设部网站网店买卖有哪些平台
  • 网页qq表情佛山百度快速排名优化
  • 网站建设方案论文1500社会新闻最新消息
  • 网站组建 需求分析市场监督管理局职责
  • 云课堂哪个网站做的好厦门关键词优化seo
  • 中企动力沈阳分公司seo免费诊断电话
  • 网站vps被黑湖人最新排名最新排名
  • 如何夸奖客户网站做的好seo课程心得体会
  • 有哪些做电子商务的网站时空seo助手
  • 临沂百度网站电脑培训机构哪个好
  • 无锡专业做网站的公司怎样把自己的产品放到网上销售
  • 大学网站建设管理办法推广技巧
  • 长春做网站公司seo关键词排名优化软件怎么选