WPF 调度程序和工作窃取?

WPF Dispatcher and Work Stealing?

我有一个将 WPF 用于其 GUI 的应用程序,但是,根据命令启动了非常繁重的处理负载。 我注意到当引擎(重处理)处于 运行ning 时我的 GUI 相当缓慢,并且在 VS2015 中使用 'Application Timeline' 工具时,我注意到我的一些引擎代码正在运行 在 UI 线程上。

引擎从以下行开始,如果我理解 LongRunning 标志,它会创建一个新线程并 运行 在该线程上执行给定函数。

        rootTask = Task.Factory.StartNew(DoWork, TaskCreationOptions.LongRunning);

上面引用的DoWork方法重复使用Parallel.For排队了数百个任务。

调度程序线程是否有可能是 'helping-out' by 运行 来自 TaskScheduler 队列的任务?如果是这样,是否有可能阻止这种情况以保持 GUI 响应(尽管这会损害后台任务)?

Is it possible that the dispatcher thread is 'helping-out' by running tasks from the TaskScheduler queue?

不,据我所知,这是不可能的。如果来自 Task 的某些代码确实在调度程序线程上执行,那么这意味着任务必须明确地将其调度到那里。