Может ли ThreadAbortException вызываться во время Thread.Sleep? - PullRequest
1 голос
/ 03 марта 2010

Может ли Thread.Abort прервать спящий поток (скажем, с помощью Thread.Sleep (TimeSpan.FromDays (40))? Или он будет ждать, пока не истечет время ожидания?

(Замечания: FromDays (40) - это, конечно, шутка. И я знаю, что Thread.Abort не является рекомендуемым способом остановки потока, я работаю с устаревшим кодом, который сейчас не хочу реорганизовывать. )

Ответы [ 2 ]

4 голосов
/ 03 марта 2010

Код стоит тысячи слов:

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

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

Программа заканчивается до истечения времени ожидания.

0 голосов
/ 03 марта 2010

Вы можете прервать поток только из другого потока. То есть вы должны где-то хранить ссылку на поток и затем вызывать .Abort из потока, отличного от того, который спит.

...