Подтвердить что ты не робот

Как получить ожидаемый Thread.Sleep?

Я пишу сетевое приложение, основанное на парадигме ожидания/сна.

Иногда возникают ошибки подключения, и по моему опыту стоит подождать некоторое время, а затем повторить операцию.

Проблема в том, что если я использую Thread.Sleep или другую подобную операцию блокировки в await/async, он блокирует всю активность в потоке вызывающего.

Чем заменить Thread.Sleep(10000) на тот же эффект, что и

await Thread.SleepAsync(10000)

?

ОБНОВИТЬ

Я предпочитаю ответ, который делает это без создания дополнительной темы

4b9b3361

Ответ 1

Другие ответы, предлагающие начать новый поток, - плохая идея - нет необходимости делать это вообще. Часть точки async/await заключается в уменьшении количества потоков, которые требуется вашему приложению.

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

// Execution of the async method will continue one second later, but without
// blocking.
await Task.Delay(1000);