Task是基于线程池的封装。Task进行异步操作就是从线程池中获取线程进行操作。
内部调度机制TaskScheduler
ThreadPoolTaskScheduler
Task的默认机制,任务在ThreadPool上执行;如果当前Task上的TaskCreationOptions设置为LongRunning的话,这个task就会委托到Thread中去执行。
SynchronizationContextTaskScheduler
同步上下文的调度器,原理就是把繁重的耗时工作丢给ThreadPool,然后将更新UI的操作丢给 UI线程的队列中,由UIThread来执行。
自定义调度器
ContinueWith
在有时候使用 Task 的 Delay 之后想要返回主线程
Task.Delay(TimeSpan.FromSeconds(5)).ContinueWith
(
_ => Foo()
// 如果 Foo 不需要操作UIThread,可以注释下面一段代码提高效率
, TaskScheduler.FromCurrentSynchronizationContext()
);