Должен ли я всегда использовать Task.Delay вместо Thread.Sleep? [Дубликат]
На этот вопрос уже есть ответ здесь:
Когда использовать Task.Delay, когда использовать Thread.Sleep? 4 ответаНедавно я видел несколько рекомендаций о том, чтоThread.Sleep
никогда не должен использоваться в производственном коде (последний раз вэтот ТАК вопрос). Многие из них выступают за использованиеTask.Delay
вместо. В большинстве объяснений, которые я нашел, в качестве примеров используются приложения пользовательского интерфейса, посколькуTask.Delay
очевидны (не блокируют пользовательский интерфейс).
В моем случае я используюThread.Sleep
внутри цикла ожидания, который опрашивает службу WCF для определенного условия, например так:
DateTime end = DateTime.UtcNow + TimeSpan.FromMinutes(2);
while (DateTime.UtcNow < end)
{
if (ExternalServiceIsReady() == true)
{
return true;
}
Thread.Sleep(1000);
}
В этом случае следующие потенциальные преимуществаTask.Delay
кажется, не применяются:
Task.Delay
кажется тривиальным.Процесс является однопоточным (без пользовательского интерфейса) и должен блокироваться, пока условие не будет выполнено, поэтому используйтеawait
здесь нет никаких преимуществ.Возможность отмены задержки не требуется.Это тот случай, когда целесообразно использоватьThread.Sleep
? Каково было бы преимущество (если есть) замены линии сна наTask.Delay(1000).Wait()
?