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.
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
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