Мы все знаем, что в C#, если какое-либо исключение выбрано, оно немедленно прекращает или убивает процесс, , что не относится к ThreadAbortException
. Почему существует специальное поведение для этого исключения?Зачем бросать ThreadAbortException не убивает процесс?
ответ
Потому что основной поток может отменить исключение и/или дождаться окончания потока, а затем продолжить обработку.
Когда вызов к методу Прервать, чтобы уничтожить нить, общий язык среда бросает ThreadAbortException. ThreadAbortException - особое исключение, которое можно поймать, но оно должно быть снова поднято в конце блока catch. Когда возбуждено это исключение, среда выполнения выполняет все блоки finally перед завершением потока. Поскольку поток может выполнить неограниченное вычисление в блоках finally или вызвать Thread.ResetAbort, чтобы отменить прерывание, нет гарантии, что нить никогда не закончится. Если вы хотите подождать, пока закончится прерванная нить, вы можете вызвать метод Thread.Join . Join - это блокирующий вызов, который не возвращается до , поток фактически прекращает выполнение.
Это связано с тем, что ThreadAbortException должен завершать только поток, на который он был отправлен. Но могут быть и другие потоки, все еще запущенные, поэтому процесс не будет завершен, пока не исчезнут все потоки переднего плана.
- 1. UnobservedTaskException не убивает процесс
- 2. Taskkill не убивает процесс
- 3. Убить не убивает процесс
- 4. sys.exit() Не убивает процесс
- 5. убивает процесс убивает другие процессы
- 6. ctrl + c не убивает процесс
- 7. Process.Kill(), похоже, не убивает процесс
- 8. Процесс Killbackground фактически убивает процесс?
- 9. Зачем бросать выражение?
- 10. C# зачем бросать ошибки
- 11. Зачем бросать в интерфейс?
- 12. Исключение - зачем даже бросать?
- 13. Activity.onDestroy() убивает процесс?
- 14. Может ли поток когда-либо бросать больше одного ThreadAbortException?
- 15. SIGALRM убивает процесс
- 16. Эффективно убивает процесс windows
- 17. «Изящно» убивает процесс
- 18. Найдите процесс тайны, который убивает мой процесс
- 19. Зачем бросать строку в строку?
- 20. HttpClient.PostAsync - Зачем это бросать ArgumentException
- 21. FederatedPassiveSecurityTokenServiceOperations.ProcessSignInResponse - ThreadAbortException
- 22. C# Процесс убивает программу не отменяет
- 23. Perl-скрипт не убивает tcl-процесс
- 24. Перезапуск WPF C# не убивает предыдущий процесс
- 25. Почему этот код не убивает процесс?
- 26. Зачем бросать CannotResolveClassException на XStream?
- 27. Повторное открытие активности убивает процесс
- 28. убивает процесс на определенном порту
- 29. Java нить периодически убивает процесс
- 30. GDB убивает мой худший процесс