Диспетчер WPF и кража работы?

У меня есть приложение, которое использует WPF для своего графического интерфейса, но по команде запускает очень большую нагрузку обработки. Я заметил, что мой GUI был довольно вялым, когда работал движок (интенсивная обработка), и при использовании инструмента "Хронология приложения" в VS2015 я заметил, что часть кода моего движка выполнялась в потоке пользовательского интерфейса.

Двигатель запускается со следующей строки, которая, если я понимаю LongRunningflag, создает новый поток и запускает данную функцию в этом потоке.

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

DoWork метод, упомянутый выше, неоднократно использует Parallel.For поставить в очередь сотни задач.

Возможно ли, что поток диспетчера "помогает", выполняя задачи из очереди TaskScheduler? Если да, возможно ли предотвратить это, чтобы графический интерфейс реагировал (хотя и в ущерб фоновым задачам)?

1 ответ

Решение

Возможно ли, что поток диспетчера "помогает", выполняя задачи из очереди TaskScheduler?

Нет, насколько я знаю, это невозможно. Если какой-то код, который исходит от Task действительно выполняется в потоке диспетчера, то это означает, что задача должна была составить расписание там.

Другие вопросы по тегам