Mécanisme de délai d'expiration d'exécution de code universel C# : un guide complet
Dans le développement de logiciels, contrôler le temps d'exécution des blocs de code est crucial, en particulier lorsqu'il s'agit de dépendances externes peu fiables ou chronophages telles que les appels d'API ou les requêtes de base de données. Pour ce faire, une méthode courante pour définir des délais d'attente pour des lignes de code uniques est nécessaire.
Mettre en œuvre un mécanisme de délai d'attente universel
L'essentiel de la création d'un mécanisme de délai d'attente universel est de mettre fin au code de longue durée et d'intercepter les erreurs possibles. Pour cela nous pouvons adopter une solution à plusieurs niveaux :
CallWithTimeout
) qui reçoit une opération et une durée d'expiration en entrée. Cette méthode démarre l'exécution du code sur un thread distinct et attache un délégué d'encapsulation pour suivre la progression. TimeoutException
. Fonctionnement pratique
Voici les détails spécifiques de mise en œuvre :
<code class="language-csharp">class Program { static void Main(string[] args) { // 设置 6000 毫秒(6 秒)的超时 CallWithTimeout(FiveSecondMethod, 6000); // 设置 4000 毫秒(4 秒)的超时 CallWithTimeout(FiveSecondMethod, 4000); } static void FiveSecondMethod() { Thread.Sleep(5000); } } static void CallWithTimeout(Action action, int timeoutMilliseconds) { Thread threadToKill = null; Action wrappedAction = () => { threadToKill = Thread.CurrentThread; try { action(); } catch (ThreadAbortException ex) { Thread.ResetAbort(); // 避免强制终止 } }; IAsyncResult result = wrappedAction.BeginInvoke(null, null); if (result.AsyncWaitHandle.WaitOne(timeoutMilliseconds)) { wrappedAction.EndInvoke(result); } else { threadToKill.Abort(); throw new TimeoutException(); } }</code>
Cette implémentation vous permet d'exécuter du code avec des délais d'attente bien définis tout en offrant une flexibilité et un contrôle élégant de l'exécution.
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!