TaskSchedule
TaskSchedule的作用
任务执行都要经过Schedule,因为Task的核心就是Schedule,因为他要考虑把任务如何安排在线程或者线程池中。
在.net framework中有两种TaskSchedule
- ThreadPoolTaskSchedule
Task的默认调度形式 ThreadPool - SynchronizationContextTaskSchedule
如图,在winform或者wpf中如果线程要访问控件,都是调用invoke方法,将更新UI的操作放到action Queue中,UI线程会从此队列中去取这些数据并更新在控件上。
(1)不要在UI线程做费时的任务,否则会出问题
(2)耗时的操作要放到线程池ThreadPool中,更新的操作放到同步上下文SynchronizationCotext中
Task task = Task.Factory.StarNew(()=>
{
Thread.Sleep(10000); //耗时操作
}).ContinueWith(()=>
{
Label1.Text = “hello”; //UI更新
}, TaskScheduler.FromCurrentSynchronizationContext());