2010-03-03 22 views
1

peut Thread.Abort interrompre un fil qui dort (en utilisant, par exemple, Thread.sleep (TimeSpan.FromDays (40)) Ou bien attendre que le laps de temps de sommeil a expiréUne exception ThreadAbortException peut-elle être déclenchée pendant Thread.Sleep?

Remarques: (? FromDays (40) est bien sûr une blague et je connais Thread.Abort n'est pas un moyen recommandé d'arrêter un thread, je travaille avec du code hérité que je ne veux pas refactoriser pour le moment.)

Répondre

4

Le code vaut mille mots:

public static void Main(string[] args) 
{ 
    var sleepy = new Thread(() => Thread.Sleep(20000)); 

    sleepy.Start(); 
    Thread.Sleep(100); 
    sleepy.Abort(); 
    sleepy.Join(); 
} 

Le programme se termine avant que le temps de sommeil est épuisé.

+1

Je vais essayer, puisque l'expérience vaut mille Lords ;-) si elle réussit comme annoncé, je vais accepter votre réponse. – user192472

+0

Mais que se passera-t-il si 'Sleep (TimeSpan.FromDays (40))'? Est-ce que cela s'arrête avant la fin du programme ou non, il s'agit d'une question à propos de – zabulus

+0

Il fonctionne en effet comme annoncé. – user192472

-2

Vous pouvez annuler Le thread d'un autre thread uniquement, c'est-à-dire, vous devez stocker la référence Thread quelque part, puis appeler .Abort à partir d'un thread autre que celui qui est en train de dormir

+0

Bien sûr. C'est comme ça que ça fonctionne. Mais cet autre thread sera-t-il capable d'interrompre un fil endormi avant la fin de la période de sommeil? – user192472

+0

Oui, bien sûr. C'est par conception. – Kerido

+1

Il n'y a rien qui vous empêche d'appeler 'Thread.CurrentThread.Abort()' –