如何使用特定的调度程序(例如GUI)启动任务

时间:2012-12-13 14:31:28

标签: c# task-parallel-library scheduler synchronizationcontext

我正在尝试使用TPL创建Task。例如:

Task.Factory.StartNew(() => DoSomething());

这很好用,但现在我想在gui线程上启动它。

我可以使用以下命令缓存gui调度程序:

_uiScheduler = TaskScheduler.FromCurrentSynchronizationContext();

但我看不到如何使用此调度程序启动新任务。我可以找到的所有示例都使用Task.ContinueWith()在初始任务完成后使用_uiScheduler安排第二个任务,但我想使用此调度程序创建初始任务。

干杯

3 个答案:

答案 0 :(得分:3)

StartNew存在大量重载。 One他们接受调度程序。只需将None传递给其他参数:

Task.Factory.StartNew(() => DoSomething(), CancellationToken.None,
                      TaskCreationOptions.None, _uiScheduler);

答案 1 :(得分:2)

简单 - this one存在重载(例如TaskFactory.StartNew),它将调度程序作为参数之一。

Task.Factory.StartNew(() => DoSomething(), CancellationToken.None,
                      TaskCreationOptions.None, _uiScheduler);

答案 2 :(得分:1)

试试这个:

TaskFactory factory = new TaskFactory(TaskScheduler.FromCurrentSynchronizationContext());
factory.StartNew(() => DoSomething());