[Thread Book #4 ] 스레드 중단
다른 스레드 실행을 중단하는 방법이다.
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Starting program...");
Thread t = new Thread(PrintNumbersWithDelay);
t.Start();
Thread.Sleep(TimeSpan.FromSeconds(6));
t.Abort();
Console.WriteLine("A thread has been aborted");
}
static void PrintNumbersWithDelay()
{
Console.WriteLine("Starting...");
for (int i = 1; i < 10; i++)
{
Thread.Sleep(TimeSpan.FromSeconds(2));
Console.WriteLine(i);
}
}
}
메인 프로그램과 숫자를 출력하는 별도의 스레드를 실힝하면, 6초간 기다린 후 스레드에서 t.Abort 메소드를 호출한다.
종료를 일으키는 threadAbortException 메소드를 스레드에 삽입한다.
이것은 매우 위험한데 일반적으로 이 예외는 어떤 시점에서 일어날수있고, 애플리케이션을 통째로 파괴할수 있기 때문이다.덧붙여 이 기술을 이용한 스레드 종료는 항상 가능하지 않다.대상 스레드는 이 예외를 처리해 중단을 거부하고, Thread.ResetAbort 메소드를 호출한다. 그런 이유로 스레드를 끝내기 위해Abort 메소드를 사용하는것을 권장하지 않는다. 선호되는 다른 방법이 있는데,예로 스레드 실행을 취소하는 CancellationToken 메소드를 둘수 있다.
출처 : C# 멀티스레드 프로그래밍 -유진 아가포노프 -
추가 정보
https://docs.microsoft.com/ko-kr/dotnet/standard/threading/destroying-threads
https://docs.microsoft.com/ko-kr/dotnet/api/system.threading.thread.resetabort?view=netframework-4.8
'[2-3]operating system > [2-3.2]Thread' 카테고리의 다른 글
스레드 동기화 (0) | 2020.06.13 |
---|---|
[Thread Book #5] 스레드 상태 조사 (0) | 2020.06.12 |
스레드의 파라미터 전달 (0) | 2020.05.13 |
스레드 우선순위 (0) | 2020.05.06 |
Using WaitingBar with a Background Worker | UI for WinForms Documentation | Telerik UI for WinForms (0) | 2020.02.18 |
댓글