一:TaskScheduler
问:TaskScheduler是做什么的?
答:我们发现任务执行要经过Scheduler。Task的核心就是这个Scheduler,因为他把要执行任务安排在线程或者线程池中。TaskScheduler由Thread和ThreadPool组成。
二:在.net FrameWork中有两种TaskScheduler
1.ThreadPoolTaskScheduler
也就是Task的默认是调用ThreadPool
1 | protected internal override void QueueTask(Task task) |
2.SynchronizationContextTaskScheduler
1.同步上下文
Task task = new Task(() =>
{
try
{
label1.Text = "das";
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
});
task.Start(TaskScheduler.FromCurrentSynchronizationContext());
2.操作耗时线程
1 | var task = Task.Factory.StartNew(() => |
ContinueWith等待执行完耗时线程,在同步上下文
三:如何自定义Scheduler?
1 | public class PerThreadTaskScheduler : TaskScheduler |