Как удерживать выполнение всего процесса, включая все его запущенные потоки, в течение определенного периода времени в С#

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

Моделирование отключения и тайм-аута требуется для целей тестирования. Приостановка выполнения процесса имитирует тайм-аут связи всех подкомпонентов. В настоящее время это можно сделать, запустив в режиме отладки и установив точку останова. В точке останова выполнение всех потоков удерживается, и все тайм-ауты возникают. Но в автоматизированном тестировании точки останова не подходят.

Как можно удерживать весь процесс, включая все запущенные потоки, в течение x секунд?

Изменить № 1: я ищу общий способ удержать выполнение всего процесса, включая все запущенные задачи (потоки) - истинное поведение точки останова без точки останова. И чем автоматизированный способ возобновить процесс.

Изменить № 2: ответ на этот вопрос может сработать. Кажется, что требуются некоторые корректировки.


person Ilya Dan    schedule 31.08.2020    source источник
comment
х-й Вопрос. Это действительно должно быть Как вызвать тайм-ауты специально для тестирования.   -  person Fildor    schedule 31.08.2020
comment
Вопрос о том, как намеренно вызывать тайм-ауты для тестирования, имеет много ответов. Лучше всего создать макет, который при необходимости вызовет тайм-аут. К сожалению, это не мой вариант. Закрытие процессов/портов может вызвать дисконнект, но тогда восстановление будет другим/невозможным. Я ищу более универсальное решение.   -  person Ilya Dan    schedule 31.08.2020


Ответы (1)


В целях отладки в Visual Studio это легко сделать с помощью окна Debug›Windows›Threads. Там вы можете заморозить и разморозить протекторы, как вам угодно.

Изменить: для выполнения этого во время модульного тестирования вам необходимо создать собственный механизм замораживания, предполагая, что каждый поток имеет цикл выполнения, в котором вы можете проверить какое-либо глобальное состояние замораживания, чтобы приостановить выполнение.

person Cosmin Sontu    schedule 31.08.2020
comment
Спасибо за ваш ответ. Поскольку потоки ожидают ответов на сообщения, я не могу заморозить их. Мне нужна более глобальная остановка - такая же, как поведение точек останова. - person Ilya Dan; 31.08.2020