Reputation: 21261
I am trying to create a Task
with the TPL. eg:
Task.Factory.StartNew(() => DoSomething());
This works fine, but now I want to start it on the gui thread.
I can cache the gui scheduler with:
_uiScheduler = TaskScheduler.FromCurrentSynchronizationContext();
but I can't see how to start a new task using this scheduler. All the examples I can find use Task.ContinueWith()
to schedule a second task using _uiScheduler
once the initial task has finished, but I want to create the initial task using this scheduler.
Cheers
Upvotes: 0
Views: 317
Reputation: 33381
Try this:
TaskFactory factory = new TaskFactory(TaskScheduler.FromCurrentSynchronizationContext());
factory.StartNew(() => DoSomething());
Upvotes: 1
Reputation: 1503040
Simple - there are overloads (such as this one) of TaskFactory.StartNew
which take a scheduler as one of the parameters.
Task.Factory.StartNew(() => DoSomething(), CancellationToken.None,
TaskCreationOptions.None, _uiScheduler);
Upvotes: 2
Reputation: 174447
There is a huge number of overloads of StartNew
. One of them accepts a scheduler. Simply pass None
for the other parameters:
Task.Factory.StartNew(() => DoSomething(), CancellationToken.None,
TaskCreationOptions.None, _uiScheduler);
Upvotes: 3