Pourquoi est-Fil.Sommeil si dangereux

Je vois souvent mentionné que Thread.Sleep(); ne doit pas être utilisé, mais je ne peux pas comprendre pourquoi il en est ainsi. Si Thread.Sleep(); peut causer des problèmes, existe-il des solutions alternatives avec le même résultat qui serait à l'abri?

par exemple.

while(true)
{
    doSomework();
    i++;
    Thread.Sleep(5000);
}

un autre est:

while (true)
{
    string[] images = Directory.GetFiles(@"C:\Dir", "*.png");

    foreach (string image in images)
    {
        this.Invoke(() => this.Enabled = true);
        pictureBox1.Image = new Bitmap(image);
        Thread.Sleep(1000);
    }
}
  • Pouvez-vous indiquer les références précises? Des preuves anecdotiques ne supporte pas un argument.
  • Pour le deuxième paragraphe: qu'essayez-vous de réaliser? (Ou, pourquoi voulez-vous dormir?)
  • Un résumé du blog peut-être " n'est pas une mauvaise utilisation de Thread.sleep()'.
  • Je ne dirais pas que c'est nocif. Je dirais plutôt que c'est comme goto: c'est à dire il y a sans doute une meilleure solution à vos problèmes de Sleep.
  • Ce n'est pas exactement la même que goto, ce qui est plus comme une odeur de code que d'une conception de l'odorat. Il n'y a rien de mal avec un compilateur insertion gotos dans votre code: l'ordinateur ne peut pas se confondre. Mais Thread.Sleep n'est pas exactement la même; compilateurs ne pas insérer de cet appel, et il a d'autres conséquences négatives. Mais oui, le sentiment général, à l'aide de c'est mauvais car il n'y a presque toujours une meilleure solution est certainement correct.
  • c'est ce que j'allait faire 🙂 bon plus si.
  • Le sommeil a ses utilise, mais a été utilisé à mauvais escient* et abusé d'un lot (extrêmes 1). Je pense que c'est plus facile pour certains d'essayer de simplement l'interdire (extrêmes 2/l'autre). Cela étant dit, une combinaison de pools de threads + éléments de travail + minuteries/événements vous donnera plus de rendement au coût de codage supplémentaire de temps/lignes de code (au lieu de dormir, ce thread pourrait faire autre chose sans avoir à vous frayer un autre). Mauvaise utilisation: essayez d'exécuter l'un de ces échantillons dans une interface graphique, application, sur principal/thread d'INTERFACE utilisateur -> qui fait Dormir aussi nocif que de la dynamite lorsque vous essayez d'ouvrir une porte, mais bon, pourquoi avez-vous choisi la dynamite?
  • Microsoft a suggéré que le Thread.Sleep(n) est nuisible ou ne doit pas être utilisé
  • Pourquoi ne peut-fil.sommeil être utilisé dans un long-serveur en cours d'exécution ou gui application de vérifier périodiquement io-demandes,etc?
  • utilisez une minuterie ou de la planification de cadre (comme quartz.net) alors...
  • Tout le monde est de fournir des avis sur pourquoi les exemples ci-dessus sont mauvais, mais personne n'a fourni une version réécrite à ne pas utiliser de Fil.Sleep() qui encore accomplit le but de les exemples donnés.
  • Chaque fois que vous mettez sleep() dans le code (ou tests) un chiot meurt
  • Les réponses ici sont un peu vieux. Aujourd'hui, l'utilisation Task.Delay. Voir is-it-always-bad-to-use-thread-sleep
  • Pardon de mon ignorance. Quel est le but de this.Invoke(() => this.Enabled = true);?

InformationsquelleAutor Burimi | 2012-01-11