zoukankan      html  css  js  c++  java
  • C#

    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.

    C#代码  收藏代码
    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.   
    12.     static UITaskSchedulerService()  
    13.     {  
    14.         GuiThread = Thread.CurrentThread;  
    15.         TaskSchedulerUI = TaskScheduler.FromCurrentSynchronizationContext();  
    16.     }  
    17.   
    18.     /// <summary>  
    19.     /// Gets the instance.  
    20.     /// </summary>  
    21.     public static UITaskSchedulerService Instance  
    22.     {  
    23.         get  
    24.         {  
    25.             return InstanceField;  
    26.         }  
    27.     }  
    28.   
    29.     /// <summary>  
    30.     /// Get TaskScheduler to schedule Tasks on UI thread.  
    31.     /// </summary>  
    32.     /// <returns>TaskScheduler to schedule Tasks on UI thread.</returns>  
    33.     public TaskScheduler GetUITaskScheduler()  
    34.     {  
    35.         return TaskSchedulerUI;  
    36.     }  
    37.   
    38.     /// <summary>  
    39.     /// Check whether current tread is UI tread  
    40.     /// </summary>  
    41.     /// <returns><c>true</c>if current tread is UI tread.</returns>  
    42.     public bool IsOnUIThread()  
    43.     {  
    44.         return GuiThread == Thread.CurrentThread;  
    45.     }  
    46. }  

    该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.

    C#代码  收藏代码
    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

  • 相关阅读:
    Funny Car Racing
    [LDUoj 倍增] 题解
    [HDU7073] Integers Have Friends 2.0 -随机大法好
    【spring】全局异常 globalexception 处理
    【maven】测试
    【spring】spring aop
    jvm常用排错命令
    idea tools
    idea插件
    【maven】搭建maven私服--基于CentOS7.6+docker
  • 原文地址:https://www.cnblogs.com/xiaochao12345/p/3761490.html
Copyright © 2011-2022 走看看