Я обнаружил, что есть пара проблем с явным получением потока через .Sleep () или другими способами, когда вы просто убедитесь, что он не захватывает процессор. Во-первых, это просто делает ваш код плохим, так как он усыпан Thread.Sleep (0). Вы можете комментировать каждый экземпляр, но он выглядит не очень хорошо.
Следующая проблема в том, что вы можете получить только тот код, который вы контролируете. Это совсем не поможет, если часть долгосрочного скрипта вызывает долгосрочную функцию, которую вы не можете контролировать.
Вместо этого я бы изменил ThreadPriority во время длительной работы на BelowNormal или Lowest. Это решит обе проблемы и, вероятно, будет более эффективным, так как ОС теперь может принимать более обоснованные решения относительно того, когда вас выводить.
[Thread]::CurrentThread.ThreadPriority = System.Threading.ThreadPriority.Lowest