스레드 및 스레딩 사용

.NET에서는 동시에 여러 작업을 수행하는 애플리케이션을 작성할 수 있습니다. 다른 작업을 지연시킬 수 있는 작업은 별도 스레드에서 실행할 수 있으며, 이 프로세스를 다중 스레딩 또는 자유 스레딩이라고 합니다.

다중 스레딩을 사용하는 애플리케이션은 프로세서를 많이 사용하는 작업이 별도 스레드에서 실행될 때 사용자 인터페이스가 활성 상태로 유지되기 때문에 사용자 입력에 더 빠르게 응답합니다. 또한 다중 스레딩은 작업이 증가함에 따라 스레드를 추가할 수 있으므로 확장 가능한 애플리케이션을 만들 때에도 유용합니다.

참고

애플리케이션 스레드의 동작을 보다 강력하게 제어해야 하는 경우 직접 스레드를 관리할 수 있습니다. 그러나 System.Threading.Tasks.ParallelSystem.Threading.Tasks.Task 클래스, PLINQ(병렬 LINQ), System.Collections.Concurrent 네임스페이스의 새로운 동시 컬렉션 클래스, 그리고 스레드가 아닌 작업 개념을 기반으로 하는 새로운 프로그래밍 모델로 인해 다중 스레드 프로그래밍이 매우 간소화되었습니다. 자세한 내용은 병렬 프로그래밍TPL(작업 병렬 라이브러리)을 참조하세요.

방법: 새 스레드 만들기 및 시작

System.Threading.Thread 클래스의 새 인스턴스를 만들어 새 스레드를 생성합니다. 새 스레드에서 실행하려는 메서드의 이름을 생성자에 제공합니다. 생성된 스레드를 시작하려면 Thread.Start 메서드를 호출합니다. 자세한 내용 및 예제는 스레드 만들기 및 시작할 때 데이터 전달 문서 및 Thread API 참조를 참조하세요.

방법: 스레드 중지

스레드의 실행을 종료하려면 System.Threading.CancellationToken을 사용합니다. 이 메서드는 스레드를 협조적으로 중지하는 단일화된 방법을 제공합니다. 자세한 내용은 관리형 스레드의 취소를 참조하세요.

경우에 따라서는 스레드를 함께 중지할 수 없는데, 이는 스레드를 함께 취소하도록 설계되지 않은 타사 코드를 실행하기 때문입니다. 이 경우 실행을 강제로 종료하는 것이 좋습니다. 스레드 실행을 강제로 종료하려면 .NET Framework에서 Thread.Abort 메서드를 사용할 수 있습니다. 해당 메서드는 호출되는 스레드에서 ThreadAbortException을 발생시킵니다. 자세한 내용은 스레드 제거를 참조하세요. .NET Core에서는 Thread.Abort 메서드를 지원하지 않습니다. .NET Core에서 강제로 타사 코드 실행을 종료해야 하는 경우 별도의 프로세스에서 코드를 실행하고 Process.Kill 메서드를 사용합니다.

System.Threading.CancellationToken은 .NET Framework 4 이전 버전에는 사용할 수 없습니다. 이전 .NET Framework 버전에서 스레드를 중지하려면 스레드 동기화 기법을 사용하여 협조적 취소를 수동으로 실행합니다. 예를 들어 shouldStop 일회성 부울 필드를 만든 다음 이를 사용하여 스레드에 의해 실행되는 코드의 중지를 요청할 수 있습니다. 자세한 내용은 C# 참조의 volatileSystem.Threading.Volatile을 참조하세요.

Thread.Join 메서드를 사용하여 호출 스레드가 중지 중인 스레드가 종료될 때까지 기다리도록 합니다.

방법: 스레드 일시 중지 또는 중단

Thread.Sleep 메서드를 사용하여 지정된 시간 동안 현재 스레드를 일시 중지합니다. Thread.Interrupt 메서드를 호출하여 차단된 스레드를 중단할 수 있습니다. 자세한 내용은 스레드 일시 중지 및 중단을 참조하세요.

스레드 속성

다음 표에서는 Thread 속성의 일부를 보여줍니다.

속성 설명
IsAlive 스레드가 시작되었으며 정상적으로 종료 또는 중단되지 않은 경우 true를 반환합니다.
IsBackground 스레드가 백그라운드 스레드인지를 나타내는 부울을 가져오거나 설정합니다. 백그라운드 스레드는 포그라운드 스레드와 같습니다. 그러나 백그라운드 스레드는 프로세스가 중지되는 것을 방지하지 않습니다. 프로세스에 속하는 모든 포그라운드 스레드가 중지되면 공용 언어 런타임은 여전히 활성 상태인 백그라운드 스레드에 대해 Abort 메서드를 호출하여 프로세스를 종료합니다. 자세한 내용은 포그라운드 및 백그라운드 스레드를 참조하세요.
Name 스레드의 이름을 가져오거나 설정합니다. 대체로 디버그할 때 개별 스레드를 찾는 데 사용됩니다.
Priority 운영 체제에서 스레드 예약의 우선 순위를 지정하는 데 사용되는 ThreadPriority 값을 가져오거나 설정합니다. 자세한 내용은 스레드 예약ThreadPriority 참조를 참조하세요.
ThreadState 현재 스레드의 상태를 포함하는 ThreadState 값을 가져옵니다.

참조