Why is TaskScheduler.Current the default TaskScheduler?

I think the current behavior makes sense. If I create my own task scheduler, and start some task that starts other tasks, I probably want all the tasks to use the scheduler I created.

I agree that it’s odd that sometimes starting a task from the UI thread uses the default scheduler and sometimes not. But I don’t know how would I make this better if I was designing it.

Regarding your specific problems:

  • I think the easiest way to start a new task on a specified scheduler is new Task(lambda).Start(scheduler). This has the disadvantage that you have to specify type argument if the task returns something. TaskFactory.Create can infer the type for you.
  • You can use Dispatcher.Invoke() instead of using TaskScheduler.FromCurrentSynchronizationContext().

Leave a Comment