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

域名解析后多久打开网站潍坊企业自助建站系统

域名解析后多久打开网站,潍坊企业自助建站系统,科技小制作怎么做视频网站,phpcms网站一个耗时的任务#xff0c;可以通过 Task.Yield 或者 Dispatcher.Yield 来中断以便分割成多个小的任务片段执行。Yield 这个词很有意思#xff0c;叫做“屈服”“放弃”“让步”#xff0c;字面意义上是让出当前任务的执行权#xff0c;转而让其他任务可以插入执行。Task、… 一个耗时的任务可以通过 Task.Yield 或者 Dispatcher.Yield 来中断以便分割成多个小的任务片段执行。Yield 这个词很有意思叫做“屈服”“放弃”“让步”字面意义上是让出当前任务的执行权转而让其他任务可以插入执行。Task、Dispatcher、Thread 都有 Yield() 方法看起来都可以让出当前任务的执行权。本文内容Dispatcher.Yield需要注意Task.Yield如果在阅读中发现对本文涉及到的一些概念不太明白可以阅读深入了解 WPF Dispatcher 的工作原理Invoke/InvokeAsync 部分深入了解 WPF Dispatcher 的工作原理PushFrame 部分如果一个方法的实现比较耗时为了不影响 UI 的响应你会选择用什么方法呢我之前介绍过的 Invoke 和 InvokeAsync 可以解决将后续耗时的任务分割成一个个小的片段以低于用户输入和渲染的优先级执行。Dispatcher.Yield 也可以其行为更加类似于 Dispatcher.InvokeAsync即采用 Dispatcher 调度的方式事实上后面会说到其实就是调用了 InvokeAsync而非 Dispatcher.Invoke即采用 PushFrame 新开消息循环的方式。使用时需要 awaitforeach(var item in collection){ DoWorkWhichWillTakeHalfASecond(); await Dispatcher.Yield();}这样这个 foreach 将在每遍历到一个集合项的时候中断一次让 UI 能够响应用户的交互输入和渲染。Yield 方法可以传入一个优先级参数指示继续执行后续任务的优先级。默认是 DispatcherPriority.Background低于用户输入 DispatcherPriority.Input、 UI 逻辑 DispatcherPriority.Loaded 和渲染 DispatcherPriority.Render。Dispatcher.Yield 是如何做到出让执行权的呢查看源码发现 DispatcherYield 的返回值是 DispatcherPriorityAwaiter而它的 OnCompleted 方法是这样的public void OnCompleted(Action continuation){ if(_dispatcher null) throw new InvalidOperationException(SR.Get(SRID.DispatcherPriorityAwaiterInvalid)); _dispatcher.InvokeAsync(continuation, _priority);}所以其实真的就是 InvokeAsync。如果希望了解为何是 OnCompleted 方法可以阅读 【C#】【多线程】【05-使用C#6.0】08-自定义awaitable类型 - L.M。Dispatcher.Yield 是 Dispatcher 类型的静态方法而不是像 InvokeAsync一样是实例方法。不过 C# 有一个神奇的特性——静态方法和实例方法可以在同一上下文中调用而不用担心产生歧义。例如using System.Windows.Threading;class Demo : DispatcherObject{ void Test() { // 调用静态方法 Yield。 await Dispatcher.Yield(); // 调用实例方法 InvokeAsync。 await Dispatcher.InvokeAsync(() { }); }}注意需要引用命名空间 System.Windows.Threading。拿前面 Dispatcher.Yield 的例子我们换成 Task.Yieldforeach(var item in collection){ DoWorkWhichWillTakeHalfASecond(); await Task.Yield();}效果与 Dispatcher.Yield(DispatcherPriority.Normal) 是一样的。因为 Task 调度回到线程上下文靠的是 SynchronizationContextWPF UI 线程的 SynchronizationContext 被设置为了 DispatcherSynchronizationContext使用 Dispatcher 调度而 DispatcherSynchronizationContext 构造时传入的优先级默认是 NormalWPF 并没有特殊传入一个别的值所以 WPF UI 线程上使用 Task.Yield() 出让执行权后恢复时使用的是 Normal 优先级相当于 Dispatcher.Yield(DispatcherPriority.Normal)。希望了解 Dispatcher 和 SynchronizationContext 的区别可以阅读 c# - Difference between Synchronization Context and Dispatcher - Stack Overflow。DispatcherSynchronizationContext 执行 await 后续任务的上下文代码/// summary/// Asynchronously invoke the callback in the SynchronizationContext./// /summarypublic override void Post(SendOrPostCallback d, Object state){ // Call BeginInvoke with the cached priority. Note that BeginInvoke // preserves the behavior of passing exceptions to // Dispatcher.UnhandledException unlike InvokeAsync. This is // desireable because there is no way to await the call to Post, so // exceptions are hard to observe. _dispatcher.BeginInvoke(_priority, d, state);}既然是 Normal 优先级那么在 UI 线程上的效果自然不如 Dispatcher.Yield。但是Task.Yield 适用于任何线程因为 SynchronizationContext 本身是与 Dispatcher 无关的适用于任何线程。这样于如果一个 Task 内部的任务太耗时用 Task.Yield 则可以做到将此任务分成很多个片段执行。如果觉得 Task.Yield() 的用途难以理解可以参考 dudu 的博客 终于明白了 C# 中 Task.Yield 的用途 - dudu - 博客园。参考资料c# - Task.Yield - real usages? - Stack OverflowTask.Yield Method (System.Threading.Tasks)c# - Difference between Synchronization Context and Dispatcher - Stack Overflow原文地址https://walterlv.com/post/yield-in-task-dispatcher.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com
http://www.zqtcl.cn/news/292324/

相关文章:

  • 注册网站安全吗制作人漫画
  • jeecms 怎么建设网站嵌入式软件开发兼职
  • 百度怎么自己做网站四川省建设工程交易中心网站
  • 中介如何做网站收客wordpress 运行代码
  • 网页设计与网站建设考试题目如何做建议的网站
  • 网站怎么推广软文政务网站建设存在问题
  • 公司官方网站建设需要多少钱wordpress单页面制作
  • 社群网站建设网站推广的方式有哪几种
  • 培训机构活动策划网站wordpress 改端口
  • 北京网站制作与营销培训用asp做网站视频
  • 江苏丹阳建设公司网站做网站中的剪辑图片
  • 纯静态网站怎样广州工程造价信息网
  • 为什么网页不能打开建设银行网站企业网站开发综合实训
  • 企业网站制作 深圳网站建站行业公司主页建设
  • 外汇直播网站建设开发做网站空间商需要办什么手续
  • 源码哥网站的模板皮肤病在线咨询医生免费咨询
  • 温岭市市住房和城乡建设规划局网站附近的电脑培训班在哪里
  • 网站备案百度站长提交减肥网站源码
  • 网站添加文章机械代加工厂家
  • 学做各种糕点的网站cn网站建设多少钱
  • 首页网站关键词优化教程如何查询网站点击率
  • 文章类型的网站模版北京朝阳区房价2023年最新房价
  • wap网站发布注销主体和注销网站
  • 微信小程序 做网站满足客户的分销管理系统
  • 高佣联盟做成网站怎么做wordpress 更新版本
  • 杭州营销网站建设公司成都网站排名优化报价
  • 网站建设设计哪家好太原新建火车站
  • 医疗网站建设信息cps推广平台有哪些
  • rp怎么做网站备案 添加网站
  • 汕尾手机网站设计淘宝客做网站怎么做