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
的某些代码确实在调度程序线程上执行,那么这意味着任务必须明确地将其调度到那里。
我有一个将 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
的某些代码确实在调度程序线程上执行,那么这意味着任务必须明确地将其调度到那里。