Thread.Sleep() : Pourquoi c'est souvent une mauvaise idée
Thread.Sleep()
est une méthode courante en programmation, mais elle est souvent critiquée pour ses inconvénients. Cet article explique pourquoi c'est problématique et suggère de meilleures alternatives.
Les inconvénients de Thread.Sleep()
Thread.Sleep()
souffre de plusieurs problèmes clés :
Thread.Sleep(n)
ne garantit pas une pause précise de n millisecondes. Le délai réel peut être plus long en raison de la planification des threads du système d'exploitation.Thread.Sleep()
bloque inutilement ces ressources.Meilleures alternatives : utiliser WaitHandles
Pour l'attente asynchrone, WaitHandles
est un choix supérieur. Ils permettent aux threads d'attendre des événements ou des signaux spécifiques sans bloquer complètement l'application.
Exemples illustratifs :
Regardons un exemple erroné utilisant Thread.Sleep()
pour un sondage :
<code class="language-csharp">while (true) { doSomework(); Thread.Sleep(5000); }</code>
Une solution plus efficace utilisant un WaitHandle
:
<code class="language-csharp">AutoResetEvent waitHandle = new AutoResetEvent(false); while (true) { doSomework(); waitHandle.WaitOne(5000); }</code>
Quand Thread.Sleep()
pourrait être acceptable
Il existe des situations limitées dans lesquelles Thread.Sleep()
pourrait être approprié :
Clé à retenir
Bien que Thread.Sleep()
semble simple, son inefficacité des ressources, son timing imprécis et son comportement de blocage le rendent inadapté à la plupart des tâches de programmation asynchrone. WaitHandles
fournit une approche plus robuste et efficace pour gérer la synchronisation des threads dans les applications multithread.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!