본문 바로가기
[2-3]operating system/[2-3.2]Thread

[Thread Book #4 ] 스레드 중단

by 오늘도 빛나는 너에게 2020. 6. 13.
728x90

[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

 

728x90

댓글