Maison >développement back-end >C++ >Comment puis-je implémenter un mécanisme de délai d'attente générique en C# pour empêcher les processus de longue durée ?
Implémentation d'un mécanisme de timeout universel en C#
En programmation, il est souvent nécessaire de fixer des délais d'exécution du code afin d'éviter que des processus de longue durée ne bloquent ou ne stagnent l'application. Pour cette raison, il est crucial de mettre en œuvre un mécanisme de délai d’attente commun et efficace.
Supposons que vous ayez une méthode qui se termine normalement en 30 secondes, mais que vous souhaitiez mettre fin à son exécution lorsqu'elle dépasse une minute. Comment puis-je y parvenir sans délais d'attente de codage en dur pour des méthodes spécifiques ?
Heureusement, C# fournit une solution via une méthode d'implémentation de délai d'attente commune. Explorons un exemple pratique.
Mécanisme de délai d'attente
Notre objectif est de créer une méthode nommée CallWithTimeout
qui exécutera une seule ligne de code ou un délégué anonyme dans un délai d'attente spécifié. Si le délai expire, l'exécution du délégué doit être arrêtée et une exception TimeoutException
doit être levée.
Détails de mise en œuvre
Le principal défi est de mettre fin à l'exécution du délégué après un délai d'attente. Ceci est réalisé grâce à une utilisation intelligente des délégués d’encapsulation et des opérations de thread.
BeginInvoke
, qui démarre l'exécution asynchrone. La propriété IAsyncResult
de l'objet AsyncWaitHandle
renvoyé est utilisée pour vérifier si le délégué a terminé dans le délai imparti. EndInvoke
est appelé pour terminer son exécution. Cependant, si un délai d'attente se produit, AsyncWaitHandle
renverra false
indiquant que le délégué est toujours en cours d'exécution. Dans ce cas, threadToKill.Abort()
sera utilisé pour terminer le thread d'exécution. catch
et ThreadAbortException
est lancé pour indiquer que le délégué a été interrompu prématurément. Utilisation
Vous pouvez utiliser la méthode CallWithTimeout
à plusieurs endroits de votre code chaque fois que vous devez vous assurer qu'un code spécifique est exécuté dans un délai prédéfini. Vous pouvez facilement configurer et exécuter des opérations chronométrées en passant le délégué et le délai d'attente comme paramètres.
Conclusion
L'implémentation d'un mécanisme de délai d'attente commun en C# vous permet de contrôler efficacement le temps d'exécution des délégués et des threads. L'exemple fourni illustre une solution puissante et élégante qui inclut la possibilité de mettre fin aux tâches de longue durée. Cette approche permet d'éviter les blocages et garantit que votre application reste réactive et performante.
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!