Comment estimer le temps d’exécution de la méthode?

J’ai l’obligation d’annuler l’exécution de la méthode s’il faut plus de deux secondes pour la terminer et la redémarrer sur un autre thread.

Donc, y a-t-il un moyen / mécanisme de rappel / HACK, je peux me faire savoir par la méthode qu’il a dépassé la limite de temps de 2 secondes?

vérifier si le lecteur réseau existe avec un délai d’expiration en c #
https://web.archive.org/web/20140222210133/http://kossovsky.net/index.php/2009/07/csharp-how-to-limited-method-execution- time

Motif Async:

public static T SafeLimex(Func F, int Timeout, out bool Completed) { var iar = F.BeginInvoke(null, new object()); if (iar.AsyncWaitHandle.WaitOne(Timeout)) { Completed = true; return F.EndInvoke(iar); } F.EndInvoke(iar); //not calling EndInvoke will result in a memory leak Completed = false; return default(T); } 

Vous devez créer System.Threading.Timer sur deux secondes, exécuter votre méthode dans un autre thread et attendre son rappel. Si la méthode est terminée avant que le timer ne soit exécuté, vous devez supprimer le timer, sinon vous devez abandonner le thread dans lequel votre méthode est en cours d’exécution. C’est assez simple par exemple

 using (new Timer(BreakFunction, true, TimeSpan.FromMinutes(2), Timeout.Infinite)) { //TODO:here you should create another thread that will run your method } 

Dans BreakFunction, vous devez abandonner le thread qui exécute vos méthodes

Ce serait bien si vous pouviez le trouver. Je l’ai cherché aussi.

Ce que je fais habituellement, c’est de démarrer la méthode dans un autre Thread , et de lancer une Timer avec 2 secondes dans ce cas. La première fois qu’il soulève l’événement, il suffit de faire:

 if (a.IsAlive) { a.Abort(); } 

Deux choses importantes:

  • Le Thread déclaré devrait être visible par la méthode qui gère le minuteur
  • Lors de l’appel de Abort() , il déclenche ThreadAbortException . Vous devez donc le gérer correctement dans la méthode.