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 respostas

Vi 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:

O tempo de suspensão é bastante grande em relação à resolução típica do timer de cerca de 15 ms, portanto, o aumento na precisão deTask.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()?

questionAnswers(1)

yourAnswerToTheQuestion