Alternatives à l'utilisation de Thread.Sleep pour attendre

Tout d'abord, je ne suis pas poser la même question que C# - Alternative à enfiler.Le sommeil?ou Alternative à enfiler.Dormir en C#?. Je ne pense pas que je l'utilise mal et ont besoin d'une véritable alternative pour des situations spécifiques.

Pendant un code de l'exécution de l'analyse, j'ai vu un surprenant violation à venir:

Utilisation de Thread.Sleep() est un signe de défaut de conception.

Cette violation entraîne Pierre de Richie article sur exactement pourquoi ce qui constitue une mauvaise conception.

Nous le savons tous la création de threads est cher et le blocage dans les discussions des moyens de contention sur la piscine. Nous savons aussi que chaque thread va allouer un meg de mémoire, donc il devrait avoir une durée de vie courte, blocage sur l'INTERFACE utilisateur est le mal, à l'aide de sommeil pour le calendrier n'est pas fiable, etc etc etc. Ce qui m'amène à mon point de vue, si vous avez vraiment besoin pour effectuer une veille, que devriez-vous utiliser si pas de Fil.Le sommeil?

Pierre cite qu'un zéro sommeil est le seul usage correct de Fil.Sommeil donnant effectivement le fil du timeslice et permettant à d'autres threads du processus. Et puis, encore plus effrayant, c'est que ce n'est qu'une raison de limitations sur la non géré threads et si re-mise en œuvre dans le CLR créer des effets secondaires de l'utilisation de Thread.Dormir dans vos applications. Tous les points sur la commune de la mauvaise utilisation sont, en fait, de bons exemples de mauvaise utilisation.

J'ai les situations suivantes dans le code de production qui utilise des Threads.Dormir avec un certain succès:

  • D'attente pour un fichier de verrouillage à être délaissée par le système d'exploitation (capture fichier de verrouillage des problèmes, attendre une secondeessayez à nouveau, lui donner après un certain temps).
  • Le meurtre d'un processus et d'attente pour elle de ne pas apparaître dans la liste des processus (kill, vérifiez qu'il n'est pas en cours d'exécution, attendre une secondevérifiez qu'il n'est pas encore en cours d'exécution, la force de la fermeture).
  • D'attente pour copier des tampons à chasse d'eau (vérifier la taille du fichier, essayez d'y accéder, attendrevérifiez si la taille a changé).

Sans utiliser de Fil.Dormir dans des situations comme celles-ci, quelles autres options s'offrent à moi? Boucles serrées ont tendance à faire empirer les choses et je ne crois pas que cela rend l'utilisation d'un "défaut de conception", surtout parce que rien n'est sur l'INTERFACE utilisateur et uniquement dans les threads d'arrière-plan. Il est dans la nature de logiciels d'attendre pour d'autres choses dans un environnement multi-thread avec des facteurs externes affectant votre code, vous devez parfois attendre...

source d'informationauteur BrutalDev