Чтобы действительно не блокировать, оставайтесь в том же потоке и ждите 5 секунд ...
var until = Environment.TickCount + 5000;
while(Environment.TickCount < until);
Один из ваших процессоров работает 5 секунд! Я действительно надеюсь, что у вас нет ни одного ядра, доступного для процесса.
Тем не менее, это означает, что поток должен ждать 5 секунд без блокировки. Поток, который не ожидает чего-то, использует процессорное время. Хотя мы стремимся к тому, чтобы наши процессоры были заняты, пока у них есть работа, мы стремимся к тому, чтобы они были заняты реальной работой.
Иногда код, подобный приведенному выше, используется для очень маленьких пауз порядка наносекунд, чтобы избежать переключений контекста, когда условие, которое поток хочет видеть перед выполнением, может произойти в ближайшее время.
Здесь это не имеет значения, поскольку временной интервал потока обычно находится в диапазоне от 20 мс до 180 мс, он явно будет расти в течение 5-секундного периода.
Несмотря на то, что мы часто хотим избежать блокировки потоков и можем пойти на все, чтобы избежать этого, в этом случае, если нам действительно придется остаться в одном потоке, мы тратим ЦП и собираемся в контекст- в любом случае переключайтесь, так что чем раньше мы заблокируем, тем лучше. Самый простой способ сделать это будет Thread.Sleep(5000)
.
В качестве альтернативы, если не удалось выполнить одно из трех требований (не блокировать, остаться в том же потоке и вернуться к методу синхронно, вызвать 5-секундную задержку) путем блокировки, мы можем перейти к доставке еще двух.
Если мы используем обратный вызов, то мы не будем возвращать значение вызывающему потоку, но будем предотвращать ненужную блокировку потоков, и это, вероятно, лучший общий подход. Это потребует дополнительной реструктуризации.
Конечно, если мы сможем выработать способ избежать другого из трех требований, что мы вообще будем ждать 5 секунд, тогда все остальные проблемы исчезнут, и мы на 5 секунд быстрее!
Оба этих последних двух подхода лучше, чем что-либо, включающее Thread.Sleep
(98% кода, который вызывает что-то, что может быть улучшено где-то, и близко к 100% кода, который вызывает его со значением выше, чем около 2 является). Трудно дать четкий совет о том, как это сделать без дополнительного контекста, почему вам нужно ждать 5 секунд в первую очередь.