Что делает resetAbort?
Привет у меня есть следующий тестовый код:
class Program
{
static void Main(string[] args)
{
Thread t = new Thread(Work);
t.Start();
Thread.Sleep(1000);
t.Abort();
Thread.Sleep(1000);
t.Abort();
Thread.Sleep(1000);
t.Abort();
t.Join();
Console.WriteLine("End");
}
static void Work()
{
int i = 0;
while (i<10)
{
try
{
while(true);
}
catch(ThreadAbortException)
{
Thread.ResetAbort();
}
Console.WriteLine("I will come back!");
i++;
}
}
}
Каждый раз, когда происходит прерывание, Thread.ResetAbort() будет выполняться. Интересно, что делает этот ResetAbort. Потому что когда я его запустил, я увидел следующий вывод: я вернусь! Я вернусь! Я вернусь! И я не видел вывод "Конец" - кажется, что эта программа вообще не заканчивалась. Ты знаешь почему? Спасибо!
3 ответа
Отменяет запрос на прерывание потока. Как указано здесь. Таким образом, в этом случае цикл будет продолжен, и поток все еще должен быть живым.
Ответ остальных о ResetAbort
верно. Причина, по которой "End" не выводится, заключается в том, что t.Join()
никогда не вернется. Это потому, что ваш поток пытается прерваться только три раза, и ваш цикл содержит 10 попыток бесконечных циклов. Join
возвращается, когда целевой поток завершает выполнение своего делегата, а ваш - нет.