2010-07-19 4 views

Répondre

0

Il est sécuritaire de l'attraper dans un bloc d'arrêt séparé. Comme une alternative, vous pouvez attraper toutes les exceptions et ensuite vérifier si une exception donnée e is ThreadAbortException

Je laisse ce poste juste à cause des commentaires. Évidemment, je ne savais pas grand chose à propos de cette exception.

+1

Les ThreadAbortExceptions ont un comportement unique dans la façon dont ils interagissent avec les blocs try/catch: dans certaines (toutes?) Circonstances, ils seront automatiquement relancés depuis le bloc catch, donc vous ne pourrez peut-être pas complètement "avaler" l'exception comme vous le feriez d'autres types. Je reconnais, je ne comprends pas complètement les nuances de ce comportement. Ce fil pourrait être en mesure de vous donner plus de perspicacité: http://stackoverflow.com/questions/2830389/whats-the-deal-with-the-hidden-throw-when-catching-a-threadabortexception – mikemanne

+0

Il semble que j'ai réussi à "avale" l'Exception, ou du moins il n'est pas repris dans le bloc suivant "catch (Exception)" qui écrit une entrée de journal, ce que je voulais obtenir. Je me demandais simplement si c'était une façon sûre de le faire, et ça ne cassait rien d'autre (tout semble fonctionner correctement, mais avec le cycle de vie fou d'ASP.NET, on ne sait jamais ...) – Farinha

1

Si vous devez arrêter un ThreadAbortException en remontant la pile des appels, vous pouvez appeler Thread.ResetAbort. Donc, essayez quelque chose comme:

try 
{ 
    // some code 
} 
catch (ThreadAbortException ex) 
{ 
    // do some logging 
    Thread.ResetAbort(); 
} 

Comme pour "correct" - cela dépend de votre scénario d'utilisation. En règle générale, je serais prudent de les prendre à moins que vous compreniez exactement pourquoi cela a été soulevé. En escence c'est un "arrêtez maintenant, rapidement, et laissez tomber ce que vous faites" signal. Réinitialiser et poursuivre le traitement doit être fait avec précaution.

Questions connexes