다음을 통해 공유


스레드 및 스레딩 사용

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

다중 스레딩을 사용하는 애플리케이션은 프로세서 집약적 작업이 별도의 스레드에서 실행됨에 따라 사용자 인터페이스가 활성 상태로 유지되므로 사용자 입력에 더 반응합니다. 다중 스레딩은 워크로드가 증가함에 따라 스레드를 추가할 수 있으므로 확장 가능한 애플리케이션을 만들 때도 유용합니다.

비고

애플리케이션 스레드의 동작을 더 자세히 제어해야 하는 경우 스레드를 직접 관리할 수 있습니다. 그러나 다중 스레드 프로그래밍은 System.Threading.Tasks.ParallelSystem.Threading.Tasks.Task 클래스와 네임스페이스의 동시 컬렉션 클래스, PLINQ(병렬 LINQ), 그리고 스레드 대신 작업 개념을 기반으로 하는 프로그래밍 모델을 사용하여 크게 간소화됩니다. 자세한 내용은 병렬 프로그래밍TPL(작업 병렬 라이브러리)을 참조하세요.

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

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

방법: 스레드 중지

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

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

System.Threading.CancellationToken.NET Framework 4 이전에는 사용할 수 없습니다. 이전 .NET Framework 버전에서 스레드를 중지하려면 스레드 동기화 기술을 사용하여 협조적 취소를 수동으로 구현합니다. 예를 들어 휘발성 부울 필드를 shouldStop 만들고 이를 사용하여 스레드에서 실행하는 코드를 중지하도록 요청할 수 있습니다. 자세한 내용은 C# 참조 및 .에서 System.Threading.Volatile를 참조하세요.

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

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

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

스레드 속성

다음 표에서는 몇 가지 Thread 속성을 제공합니다.

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

참고하십시오