Devo sempre usar Task.Delay em vez de Thread.Sleep? [duplicado]
Esta pergunta já tem uma resposta aqui:
Quando usar o Task.Delay, quando usar o Thread.Sleep? 4 respostasVi recentemente várias recomendações afirmando queThread.Sleep
nunca deve ser usado no código de produção (mais recentemente emesta pergunta SO) Muitos deles advogam o uso deTask.Delay
em vez de. A maioria das explicações que encontrei usa aplicativos de interface do usuário como exemplos, pois as vantagens deTask.Delay
são óbvias (não estão bloqueando a interface do usuário).
No meu caso, estou usandoThread.Sleep
dentro de um loop de espera que consulta um serviço WCF para uma condição específica, assim:
DateTime end = DateTime.UtcNow + TimeSpan.FromMinutes(2);
while (DateTime.UtcNow < end)
{
if (ExternalServiceIsReady() == true)
{
return true;
}
Thread.Sleep(1000);
}
Nesse caso, as seguintes vantagens potenciais deTask.Delay
parece não se aplicar:
Task.Delay
parece trivial.O processo é de thread único (sem interface do usuário) e deve bloquear até que a condição seja verdadeira, portanto, useawait
não tem vantagem aqui.A capacidade de cancelar o atraso não é necessária.É este o caso em que é apropriado usarThread.Sleep
? Qual seria a vantagem (se houver) de substituir minha linha de sono porTask.Delay(1000).Wait()
?