Pourquoi l'utilisation du Système.Le filetage.Fil de discussion.Sleep() est une mauvaise pratique?

Je suis en train d'écrire une application fonctionnant avec une grosse et moche 3ème partie du système via une API complexe.
Parfois, certaines erreurs se produisent dans le système, mais si nous attendons pour mon programme pour faire face à cette erreur, il peut être trop tard.

J'utilise un thread séparé pour vérifier l'état du système comme suit:

while (true)
{
    ask_state();
    check_state();
    System.Threading.Thread.Sleep(TimeSpan.FromSeconds(1));
}

Il n'importe pas vraiment si je vérifier l'état du système une fois en 100 ms ou une fois par minute.

Mais j'ai entendu dire que l'utilisation de Threads.Sleep() est une mauvaise pratique. Pourquoi? Et que puis-je faire dans cette situation?

Si vous voulez vérifier quelque chose régulièrement, pourquoi ne pas utiliser une minuterie?
La principale question est " est la minuterie mieux ou pas? et pourquoi Thread.Sleep() est mauvais?'
Parce que vous gardez un fil vivant inutiles. La question de savoir si cela est vraiment important est bien sûr en fonction de votre contexte. Si vous disposez d'une simple application, puis à l'aide d'un minuteur périodique ou un thread dédié ne serait probablement pas générer des différences de rendement depuis la minuterie sera tout simplement la force d'un thread du pool de threads pour rester en vie.
En général (et en particulier avec une très grande application multi-thread), il y a plus de descriptif des solutions de rechange. par exemple, une minuterie.
"J'ai entendu dire que l'utilisation de Threads.Sleep() est une mauvaise pratique " - presque tout peut être utilisée à mauvais escient. Est-ce que votre code de travail ci-dessus? Si oui, il suffit de laisser.

OriginalL'auteur user2862319 | 2013-11-15