Как получить ожидаемый Thread.Sleep?
Я пишу сетевое приложение, основанное на парадигме ожидания/сна.
Иногда возникают ошибки подключения, и по моему опыту стоит подождать некоторое время, а затем повторить операцию.
Проблема в том, что если я использую Thread.Sleep или другую подобную операцию блокировки в await/async, он блокирует всю активность в потоке вызывающего.
Чем заменить Thread.Sleep(10000) на тот же эффект, что и
await Thread.SleepAsync(10000)
?
ОБНОВИТЬ
Я предпочитаю ответ, который делает это без создания дополнительной темы
Ответы
Ответ 1
Другие ответы, предлагающие начать новый поток, - плохая идея - нет необходимости делать это вообще. Часть точки async
/await
заключается в уменьшении количества потоков, которые требуется вашему приложению.
Вместо этого вы должны использовать Task.Delay
, который не требует нового потока, и был разработан именно для этой цели:
// Execution of the async method will continue one second later, but without
// blocking.
await Task.Delay(1000);