본문 바로가기
C#/책 예제

C# Thread 인터럽트로 종료하기.

by HyunS_ 2019. 6. 8.
using System;
using System.Threading;

namespace ThreadNTask
{
    class Program
    {
        static void Main(string[] args)
        {
            SlideTask slideTask = new SlideTask(100);

            Thread thread = new Thread(new ThreadStart(slideTask.KeepAlive));
            thread.IsBackground = true;

            Console.WriteLine("스레드 시작");
            thread.Start();

            Thread.Sleep(100);

            Console.WriteLine("스레드 종료");
            thread.Interrupt();

            Console.WriteLine("스레드가 멈출때까지 대기");
            thread.Join();

            Console.WriteLine("종료");
        }
    }

    class SlideTask
    { 
        private int count;

        public SlideTask(int count)
        { 
            this.count = count;
        }

        public void KeepAlive()
        {
            try
            {
                Console.WriteLine("실행중인 스레드가 중단되지 않습니다.");
                Thread.SpinWait(100000000);

                while(count > 0)
                {
                    Console.WriteLine($"{count --} left");

                    Console.WriteLine("WaitJoinSleep State 로 바뀌는 중");
                    Thread.Sleep(10);
                }
                Console.WriteLine("Count: 0");
            }
            catch(ThreadAbortException threadAbortException)
            {
                Console.WriteLine(threadAbortException);
            }
            finally
            {
                Console.WriteLine("리소스 지우기");
            }
        }

            

    }

    
}
728x90

'C# > 책 예제' 카테고리의 다른 글

C# Thread Monitor 키워드를 이용한 동기화  (0) 2019.06.08
C# Thread lock 키워드를 이용한 동기화  (0) 2019.06.08
C# Thread 상태 변화  (0) 2019.06.08
C# Thread 임의 종료  (0) 2019.06.08
C# / Thread 시작  (0) 2019.06.08

댓글