Диспетчер WPF и кража работы?
У меня есть приложение, которое использует WPF для своего графического интерфейса, но по команде запускает очень большую нагрузку обработки. Я заметил, что мой GUI был довольно вялым, когда работал движок (интенсивная обработка), и при использовании инструмента "Хронология приложения" в VS2015 я заметил, что часть кода моего движка выполнялась в потоке пользовательского интерфейса.
Двигатель запускается со следующей строки, которая, если я понимаю LongRunning
flag, создает новый поток и запускает данную функцию в этом потоке.
rootTask = Task.Factory.StartNew(DoWork, TaskCreationOptions.LongRunning);
DoWork
метод, упомянутый выше, неоднократно использует Parallel.For
поставить в очередь сотни задач.
Возможно ли, что поток диспетчера "помогает", выполняя задачи из очереди TaskScheduler? Если да, возможно ли предотвратить это, чтобы графический интерфейс реагировал (хотя и в ущерб фоновым задачам)?
1 ответ
Возможно ли, что поток диспетчера "помогает", выполняя задачи из очереди TaskScheduler?
Нет, насколько я знаю, это невозможно. Если какой-то код, который исходит от Task
действительно выполняется в потоке диспетчера, то это означает, что задача должна была составить расписание там.