Thread.Abort 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
스레드를 ThreadAbortException 종료하는 프로세스를 시작하기 위해 호출되는 스레드에서 발생합니다. 이 메서드를 호출하면 일반적으로 스레드가 종료됩니다.
오버로드
| Name | Description |
|---|---|
| Abort() |
사용되지 않음.
스레드를 ThreadAbortException 종료하는 프로세스를 시작하기 위해 호출되는 스레드에서 발생합니다. 이 메서드를 호출하면 일반적으로 스레드가 종료됩니다. |
| Abort(Object) |
사용되지 않음.
ThreadAbortException 스레드 종료에 대한 예외 정보도 제공하면서 스레드를 종료하는 프로세스를 시작하기 위해 스레드가 호출되는 스레드에서 발생합니다. 이 메서드를 호출하면 일반적으로 스레드가 종료됩니다. |
설명
중요합니다
신중하게 메서드를 Thread.Abort 사용합니다. 특히 현재 스레드가 아닌 다른 스레드를 중단하도록 호출하는 경우 throw될 때 ThreadAbortException 실행되었거나 실행하지 못한 코드를 알 수 없습니다. 또한 애플리케이션의 상태 또는 유지를 담당하는 애플리케이션 및 사용자 상태를 확신할 수 없습니다. 예를 들어 호출 Thread.Abort 은 정적 생성자의 실행 또는 관리되는 리소스 또는 관리되지 않는 리소스의 릴리스를 방지할 수 있습니다.
Abort()
- Source:
- Thread.cs
- Source:
- Thread.cs
- Source:
- Thread.cs
- Source:
- Thread.cs
- Source:
- Thread.cs
주의
Thread.Abort is not supported and throws PlatformNotSupportedException.
스레드를 ThreadAbortException 종료하는 프로세스를 시작하기 위해 호출되는 스레드에서 발생합니다. 이 메서드를 호출하면 일반적으로 스레드가 종료됩니다.
public:
void Abort();
[System.Obsolete("Thread.Abort is not supported and throws PlatformNotSupportedException.", DiagnosticId="SYSLIB0006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public void Abort();
public void Abort();
[<System.Obsolete("Thread.Abort is not supported and throws PlatformNotSupportedException.", DiagnosticId="SYSLIB0006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
member this.Abort : unit -> unit
member this.Abort : unit -> unit
Public Sub Abort ()
- 특성
예외
.NET Core 및 .NET 5+만: 모든 경우에.
호출자에게 필요한 권한이 없습니다.
중단 중인 스레드는 현재 일시 중단됩니다.
설명
이 메서드는 사용되지 않습니다. .NET 5 이상 버전에서 이 메서드를 호출하면 컴파일 시간 경고가 생성됩니다. 이 메서드는 PlatformNotSupportedException 런타임에 .NET 5 이상 및 .NET Core에서 throw합니다.
이 메서드가 스레드에서 호출되면 시스템은 스레드에서 해당 메서드를 ThreadAbortException throw하여 중단합니다.
ThreadAbortException는 애플리케이션 코드에서 catch할 수 있는 특수 예외이지만 호출되지 않는 한 ResetAbort 블록의 catch 끝에서 다시 throw됩니다.
ResetAbort 는 중단 요청을 취소하고 스레드를 ThreadAbortException 종료하지 못하게 합니다. 실행 finally 되지 않은 블록은 스레드가 중단되기 전에 실행됩니다.
메모
스레드 Abort 가 자체 호출하는 경우 효과는 예외 ThreadAbortException 를 throw하는 것과 유사합니다. 즉, 즉시 발생하며 결과를 예측할 수 있습니다. 그러나 한 스레드가 다른 스레드에서 호출 Abort 하는 경우 중단은 실행 중인 코드를 중단합니다. 정적 생성자가 중단될 수도 있습니다. 드문 경우이므로 해당 클래스의 인스턴스가 해당 애플리케이션 도메인에서 만들어지는 것을 방지할 수 있습니다.
스레드가 즉시 또는 전혀 중단되지는 않습니다. 이 상황은 스레드가 중단 절차의 일부로 호출되는 블록에서 finally 무제한 계산을 수행하여 중단을 무기한 지연시키는 경우에 발생할 수 있습니다. 스레드가 중단될 때까지 기다리려면 메서드를 호출한 후 스레드에서 메서드를 호출 JoinAbort 할 수 있지만 대기가 종료될 것이라는 보장은 없습니다.
메모
중단 중인 스레드가 블록, finally 블록 또는 제한된 실행 영역과 같은 catch 보호된 코드 영역에 있는 경우 호출 Abort 하는 스레드가 차단될 수 있습니다. 호출 Abort 하는 스레드가 중단된 스레드에 필요한 잠금을 보유하는 경우 교착 상태가 발생할 수 있습니다.
Abort 시작되지 않은 스레드에서 호출되면 스레드가 호출될 때 Start 중단됩니다. 차단되거나 절전 모드인 스레드에서 호출되면 Abort 스레드가 중단된 다음 중단됩니다.
일시 중단된 스레드에서 호출되는 경우 Abort 호출Abort된 ThreadStateException 스레드에서 throw되고 AbortRequested 중단되는 스레드의 속성에 추가 ThreadState 됩니다. A ThreadAbortException 는 호출될 때까지 Resume 일시 중단된 스레드에서 throw되지 않습니다.
관리되지 않는 코드를 ThreadAbortException 실행하는 동안 관리되는 스레드에서 호출되는 경우 Abort 스레드가 관리 코드로 반환될 때까지 throw되지 않습니다.
두 개의 호출 Abort 이 동시에 올 경우 한 호출에서 상태 정보를 설정하고 다른 호출은 실행할 Abort수 있습니다. 그러나 애플리케이션은 이 상황을 감지할 수 없습니다.
스레드에서 호출된 후에 Abort 는 스레드 상태가 포함됩니다 AbortRequested. 스레드가 성공적으로 호출 Abort된 결과로 종료되면 스레드의 상태가 .로 변경됩니다 Stopped. 충분한 사용 권한을 가진 스레드는 메서드를 Abort 사용하여 ResetAbort 중단을 취소할 수 있습니다. 메서드 호출을 보여 주는 예제는 ResetAbort 클래스를 참조하세요 ThreadAbortException .
추가 정보
적용 대상
Abort(Object)
- Source:
- Thread.cs
- Source:
- Thread.cs
- Source:
- Thread.cs
- Source:
- Thread.cs
- Source:
- Thread.cs
주의
Thread.Abort is not supported and throws PlatformNotSupportedException.
ThreadAbortException 스레드 종료에 대한 예외 정보도 제공하면서 스레드를 종료하는 프로세스를 시작하기 위해 스레드가 호출되는 스레드에서 발생합니다. 이 메서드를 호출하면 일반적으로 스레드가 종료됩니다.
public:
void Abort(System::Object ^ stateInfo);
[System.Obsolete("Thread.Abort is not supported and throws PlatformNotSupportedException.", DiagnosticId="SYSLIB0006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public void Abort(object? stateInfo);
public void Abort(object stateInfo);
public void Abort(object? stateInfo);
[<System.Obsolete("Thread.Abort is not supported and throws PlatformNotSupportedException.", DiagnosticId="SYSLIB0006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
member this.Abort : obj -> unit
member this.Abort : obj -> unit
Public Sub Abort (stateInfo As Object)
매개 변수
- stateInfo
- Object
중단되는 스레드에서 사용할 수 있는 상태와 같은 애플리케이션 관련 정보를 포함하는 개체입니다.
- 특성
예외
.NET Core 및 .NET 5+만: 모든 경우에.
호출자에게 필요한 권한이 없습니다.
중단 중인 스레드는 현재 일시 중단됩니다.
예제
다음 코드 예제에서는 중단 중인 스레드에 정보를 전달하는 방법을 보여줍니다.
using System;
using System.Threading;
class Test
{
public static void Main()
{
Thread newThread = new Thread(new ThreadStart(TestMethod));
newThread.Start();
Thread.Sleep(1000);
// Abort newThread.
Console.WriteLine("Main aborting new thread.");
newThread.Abort("Information from Main.");
// Wait for the thread to terminate.
newThread.Join();
Console.WriteLine("New thread terminated - Main exiting.");
}
static void TestMethod()
{
try
{
while(true)
{
Console.WriteLine("New thread running.");
Thread.Sleep(1000);
}
}
catch(ThreadAbortException abortException)
{
Console.WriteLine((string)abortException.ExceptionState);
}
}
}
open System.Threading
let testMethod () =
try
while true do
printfn "New thread running."
Thread.Sleep 1000
with :? ThreadAbortException as abortException ->
printfn $"{abortException.ExceptionState :?> string}"
let newThread = Thread testMethod
newThread.Start()
Thread.Sleep 1000
// Abort newThread.
printfn "Main aborting new thread."
newThread.Abort "Information from Main."
// Wait for the thread to terminate.
newThread.Join()
printfn "New thread terminated - Main exiting."
Imports System.Threading
Public Class Test
<MTAThread> _
Shared Sub Main()
Dim newThread As New Thread(AddressOf TestMethod)
newThread.Start()
Thread.Sleep(1000)
' Abort newThread.
Console.WriteLine("Main aborting new thread.")
newThread.Abort("Information from Main.")
' Wait for the thread to terminate.
newThread.Join()
Console.WriteLine("New thread terminated - Main exiting.")
End Sub
Shared Sub TestMethod()
Try
While True
Console.WriteLine("New thread running.")
Thread.Sleep(1000)
End While
Catch abortException As ThreadAbortException
Console.WriteLine( _
CType(abortException.ExceptionState, String))
End Try
End Sub
End Class
설명
이 메서드는 사용되지 않습니다. .NET 5 이상 버전에서 이 메서드를 호출하면 컴파일 시간 경고가 생성됩니다. 이 메서드는 PlatformNotSupportedException 런타임에 .NET 5 이상 및 .NET Core에서 throw합니다.
이 메서드가 스레드에서 호출되면 시스템은 스레드에서 해당 메서드를 ThreadAbortException throw하여 중단합니다.
ThreadAbortException는 애플리케이션 코드에서 catch할 수 있는 특수 예외이지만 호출되지 않는 한 ResetAbort 블록의 catch 끝에서 다시 throw됩니다.
ResetAbort 는 중단 요청을 취소하고 스레드를 ThreadAbortException 종료하지 못하게 합니다. 실행 finally 되지 않은 블록은 스레드가 중단되기 전에 실행됩니다.
메모
스레드 Abort 가 자체 호출하는 경우 효과는 예외 ThreadAbortException 를 throw하는 것과 유사합니다. 즉, 즉시 발생하며 결과를 예측할 수 있습니다. 그러나 한 스레드가 다른 스레드에서 호출 Abort 하는 경우 중단은 실행 중인 코드를 중단합니다. 정적 생성자가 중단될 수 있습니다. 드문 경우이므로 해당 클래스의 인스턴스가 해당 애플리케이션 도메인에서 만들어지는 것을 방지할 수 있습니다.
스레드가 즉시 또는 전혀 중단되지는 않습니다. 이 상황은 스레드가 중단 절차의 일부로 호출되는 블록에서 finally 무제한 계산을 수행하여 중단을 무기한 지연시키는 경우에 발생할 수 있습니다. 스레드가 중단될 때까지 기다리려면 메서드를 호출한 후 스레드에서 메서드를 호출 JoinAbort 할 수 있지만 대기가 종료된다는 보장은 없습니다.
메모
중단 중인 스레드가 블록, finally 블록 또는 제한된 실행 영역과 같은 catch 보호된 코드 영역에 있는 경우 호출 Abort 하는 스레드가 차단될 수 있습니다. 호출 Abort 하는 스레드가 중단된 스레드에 필요한 잠금을 보유하는 경우 교착 상태가 발생할 수 있습니다.
Abort 시작되지 않은 스레드에서 호출되면 스레드가 호출될 때 Start 중단됩니다. 차단되거나 절전 모드인 스레드에서 호출되면 Abort 스레드가 중단된 다음 중단됩니다.
일시 중단된 스레드에서 호출되는 경우 Abort 호출Abort된 ThreadStateException 스레드에서 throw되고 AbortRequested 중단되는 스레드의 속성에 추가 ThreadState 됩니다. A ThreadAbortException 는 호출될 때까지 Resume 일시 중단된 스레드에서 throw되지 않습니다.
관리되지 않는 코드를 ThreadAbortException 실행하는 동안 관리되는 스레드에서 호출되는 경우 Abort 스레드가 관리 코드로 반환될 때까지 throw되지 않습니다.
두 개의 호출 Abort 이 동시에 올 경우 한 호출에서 상태 정보를 설정하고 다른 호출은 실행할 Abort수 있습니다. 그러나 애플리케이션은 이 상황을 감지할 수 없습니다.
스레드에서 호출된 후에 Abort 는 스레드 상태가 포함됩니다 AbortRequested. 스레드가 성공적으로 호출 Abort된 결과로 종료되면 스레드의 상태가 .로 변경됩니다 Stopped. 충분한 사용 권한을 가진 스레드는 메서드를 Abort 사용하여 ResetAbort 중단을 취소할 수 있습니다. 메서드 호출을 보여 주는 예제는 ResetAbort 클래스를 참조하세요 ThreadAbortException .