task Scheduler根据定义

The task Scheduler by the definition blurb.

“Is the class where the usage context is within the task libraries. “

它的作用像是WPF/Winform时代的SynchronizationContext.

It is like the Synchronization context in the cross WPF/Win forms era.

像SynchronizationContext.一样,TaskScheduler也有可能依赖特定的UI SynchronizationContext.

As with the Synchronization context, we may have requirement for like the UI context synchronization.

代码如下:

Give the code as below.

  1. /// <summary>
  2. /// This service is designed to return a TaskScheduler for application's main, UI thread.
  3. /// This service MUST be instantiated on UI thread.
  4. /// </summary>
  5. [DebuggerNonUserCode]
  6. public class UITaskSchedulerService : IUITaskSchedulerService
  7. {
  8. private static readonly UITaskSchedulerService InstanceField = new UITaskSchedulerService();
  9. private static readonly TaskScheduler TaskSchedulerUI;
  10. private static readonly Thread GuiThread;
  11. static UITaskSchedulerService()
  12. {
  13. GuiThread = Thread.CurrentThread;
  14. TaskSchedulerUI = TaskScheduler.FromCurrentSynchronizationContext();
  15. }
  16. /// <summary>
  17. /// Gets the instance.
  18. /// </summary>
  19. public static UITaskSchedulerService Instance
  20. {
  21. get
  22. {
  23. return InstanceField;
  24. }
  25. }
  26. /// <summary>
  27. /// Get TaskScheduler to schedule Tasks on UI thread.
  28. /// </summary>
  29. /// <returns>TaskScheduler to schedule Tasks on UI thread.</returns>
  30. public TaskScheduler GetUITaskScheduler()
  31. {
  32. return TaskSchedulerUI;
  33. }
  34. /// <summary>
  35. /// Check whether current tread is UI tread
  36. /// </summary>
  37. /// <returns><c>true</c>if current tread is UI tread.</returns>
  38. public bool IsOnUIThread()
  39. {
  40. return GuiThread == Thread.CurrentThread;
  41. }
  42. }

该class的要求是必须在UI thread初始化。

The requirement for the UITaskShcedulerService is that you should construct the singleton instance to start from a UI threads.

因为他内部使用的是TaskScheduler.FromCurrentSynchronizationContext,根据MSDN的TaskScheduler Class 定义 ,它拿到的是当前thread的synchronization context

Because it  internally use the TaskScheduler.FromCurrentSynchronizationContext. and from the TaskScheduler Class from MSDN, it retrieve the current thread’s synchronization context.

  1. Task.Factory
  2. .StartNew(
  3. () =>
  4. _riskProvider.GetRiskPnL(),
  5. CancellationToken.None,
  6. TaskCreationOptions.None,
  7. TaskScheduler.Default)
  8. .ContinueWith(
  9. (task) => ProcessResults(task.Result),
  10. UITaskSchedulerService.Instance.GetUITaskScheduler()
  11. )
  12. //.ContinueWith(
  13. // (task) => ProcessResults(task.Result),
  14. // TaskScheduler.FromCurrentSynchronizationContext())
  15. .LogTaskExceptionIfAny(Log)
  16. .ContinueWith(x => DataUpdater());

处理结果需要dispatch到UI thread上,这样才能正确的显示。

We need to dispatch the process result back to the UI thread so that display can be properly handled.

References:

TaskScheduler Class

C# - 简单介绍TaskScheduler的更多相关文章

  1. [原创]关于mybatis中一级缓存和二级缓存的简单介绍

    关于mybatis中一级缓存和二级缓存的简单介绍 mybatis的一级缓存: MyBatis会在表示会话的SqlSession对象中建立一个简单的缓存,将每次查询到的结果结果缓存起来,当下次查询的时候 ...

  2. 利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍

    一.pandas 是什么 pandas 是基于 NumPy 的一个 Python 数据分析包,主要目的是为了数据分析.它提供了大量高级的数据结构和对数据处理的方法. pandas 有两个主要的数据结构 ...

  3. 利用Python进行数据分析(4) NumPy基础: ndarray简单介绍

    一.NumPy 是什么 NumPy 是 Python 科学计算的基础包,它专为进行严格的数字处理而产生.在之前的随笔里已有更加详细的介绍,这里不再赘述. 利用 Python 进行数据分析(一)简单介绍 ...

  4. yii2的权限管理系统RBAC简单介绍

    这里有几个概念 权限: 指用户是否可以执行哪些操作,如:编辑.发布.查看回帖 角色 比如:VIP用户组, 高级会员组,中级会员组,初级会员组 VIP用户组:发帖.回帖.删帖.浏览权限 高级会员组:发帖 ...

  5. angular1.x的简单介绍(二)

    首先还是要强调一下DI,DI(Denpendency Injection)伸手获得,主要解决模块间的耦合关系.那么模块是又什么组成的呢?在我看来,模块的最小单位是类,多个类的组合就是模块.关于在根模块 ...

  6. Linux的简单介绍和常用命令的介绍

    Linux的简单介绍和常用命令的介绍 本说明以Ubuntu系统为例 Ubuntu系统的安装自行百度,或者参考http://www.cnblogs.com/CoderJYF/p/6091068.html ...

  7. iOS-iOS开发简单介绍

    概览 终于到了真正接触IOS应用程序的时刻了,之前我们花了很多时间去讨论C语言.ObjC等知识,对于很多朋友而言开发IOS第一天就想直接看到成果,看到可以运行的IOS程序.但是这里我想强调一下,前面的 ...

  8. iOS开发多线程篇—多线程简单介绍

    iOS开发多线程篇—多线程简单介绍 一.进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcod ...

  9. iOS开发UI篇—UITabBarController简单介绍

    iOS开发UI篇—UITabBarController简单介绍 一.简单介绍 UITabBarController和UINavigationController类似,UITabBarControlle ...

随机推荐

  1. MQTT Stresser

    go环境请参考https://www.cnblogs.com/saryli/p/9833253.html Load testing tool to stress MQTT message broker ...

  2. Python type() 函数

    描述 type() 函数如果你只有第一个参数则返回对象的类型,三个参数返回新的类型对象.类似isinstance() isinstance() 与 type() 区别: type() 不会认为子类是一 ...

  3. 如何查看域名解析是否生效--windows命令

  4. asp.net2.0导出pdf文件完美解决方案【转载】

    asp.net2.0导出pdf文件完美解决方案 作者:清清月儿 PDF简介:PDF(Portable Document Format)文件格式是Adobe公司开发的电子文件格式.这种文件格式与操作系统 ...

  5. vnc viewer中开启剪切板复制内容到ubuntu系统中

    说明,本机是ubuntu16,安装的vnc server 是x11vnc,具体安装方法请看之前博文.ubuntu16.4中开启vncserver进行远程桌面 vncviewer on Windows ...

  6. 子墨庖丁Android的ActionBar源代码分析 (一)实例化

    假设你从事过Androidclient开发,相信你对ActionBar这套框架并不陌生,或者说你并不了解它,可是你应该时不时的要跟它打交道.抛开ActionBar的实现不说,ActionBar实际上是 ...

  7. 如何用adb抓取log?

    在Androidclient的測试过程中,有时候我们会遇到闪退等异常情况. 这时我们能够通过adb抓取log.从而给开发提供很多其它信息. 一.下载ADB.exe     在网上搜索"adb ...

  8. javascript中字符串与数组互转的方法分享

    说明:1.join()方法:用于把数组中的所有元素放入一个字符串,元素是通过指定的分隔符进行分隔的.指定分隔符方法join("$");其中$可以是任意字符2.split()方法:用 ...

  9. mysql部分学习心得(入门级别)

    mysql中针对不同的数据选择对应的存储引擎 mysql中也会针对不同的数据处理选择对应的存储的引擎 mysql中也会针对不同的数据处理选择对应的存储的引擎 mysql中一些授权(grant)等的通常 ...

  10. Linux,Windows中的相对路径、绝对路径

    1.Windows绝对路径:以盘符开始 如C:/a.txt相对路径:. 指的是当前目录.. 指的是挡圈目录的上一级目录./test表示当前目录下的test文件夹/test表示当前盘符下的test文件夹 ...