Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#에서 스레드의 현재 상태를 확인하는 방법 – ThreadState 속성 활용하기


C#에서 스레드의 현재 상태를 확인하려면 ThreadState 속성을 사용하면 됩니다. 이 속성은 System.Threading 네임스페이스의 ThreadState 열거형 값을 반환하며, 해당 스레드가 아직 시작되지 않았는지(Unstarted), 실행 중인지(Running) 등을 알려 줍니다. 아래 예제를 통해 자세히 살펴보겠습니다.

예제 1

using System;
using System.Threading;
public class Demo {
    public static void Main(){
        Thread thread = new Thread(new ThreadStart(demo1));
        ThreadPool.QueueUserWorkItem(new WaitCallback(demo2));
        Console.WriteLine("Current state of Thread = "+thread.ThreadState);
        Console.WriteLine("ManagedThreadId = "+thread.ManagedThreadId);
    }
    public static void demo1(){
        Thread.Sleep(2000);
    }
    public static void demo2(object stateInfo){
        Console.WriteLine("Thread belongs to managed thread pool? = "+Thread.CurrentThread.IsThreadPoolThread);
    }
}

출력 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

Current state of Thread = Unstarted
ManagedThreadId = 3

스레드 객체를 생성한 후 Start() 메서드를 호출하지 않았기 때문에 스레드 상태가 Unstarted로 표시됩니다. ManagedThreadId는 .NET 런타임이 해당 스레드에 부여한 고유 식별자입니다.

예제 2

이번에는 Start() 메서드 호출 전후로 스레드 상태가 어떻게 변하는지 확인해 보겠습니다.

using System;
using System.Threading;
public class Demo {
    public static void Main(){
        Thread thread = new Thread(new ThreadStart(demo));
        Console.WriteLine("ManagedThreadId = "+thread.ManagedThreadId);
        Console.WriteLine("Current state of Thread = "+thread.ThreadState);
        thread.Start();
        Console.WriteLine("Current state of Thread = "+thread.ThreadState);
    }
    public static void demo(){
        Console.WriteLine("Thread belongs to managed thread pool? = "+Thread.CurrentThread.IsThreadPoolThread);
    }
}

출력 결과

실행 결과는 다음과 같습니다.

ManagedThreadId = 3
Current state of Thread = Unstarted
Thread belongs to managed thread pool? = False
Current state of Thread = Running

Start() 호출 전에는 상태가 Unstarted였지만, 호출 후에는 Running으로 변경된 것을 확인할 수 있습니다. 또한 new Thread()로 직접 생성한 스레드는 관리되는 스레드 풀(ThreadPool)에 속하지 않기 때문에 IsThreadPoolThread 값이 False로 출력됩니다.

주요 ThreadState 값 정리

  • Unstarted: 스레드가 생성되었지만 아직 시작되지 않은 상태
  • Running: 스레드가 실행 중인 상태
  • WaitSleepJoin: Sleep, Wait, Join 호출 등으로 대기 중인 상태
  • Suspended: 일시 중단된 상태
  • Stopped: 실행이 완료되어 종료된 상태
  • Background: 백그라운드 스레드로 동작 중인 상태