it-swarm.com.ru

Как получить ожидаемую тему. Сон?

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

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

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

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

await Thread.SleepAsync(10000)

?

UPDATE

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

106
Arsen Zahray

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

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

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