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

  • 相关阅读:
    [转]asp.net页面缓存技术
    UL和LI在div中的高度的IE6下兼容性
    jquery制作的横向图片滚动带横向滚动条TackerScroll
    电脑可以上网,但是qq登陆不上去?
    Introduction to discrete event system学习笔记4.6
    Introduction to Discrete event system学习笔记4.9
    Introduction to discrete event systemsstudy 4.5
    Symbolic synthesis of obserability requirements for diagnosability B.Bittner,M.Bozzano,A.Cimatti,and X.Olive笔记4.16
    Introduction to discrete event system学习笔记4.8pm
    Introduction to discrete event system学习笔记 4.8
  • 原文地址:https://www.cnblogs.com/xiaochao12345/p/3761490.html
Copyright © 2011-2022 走看看