Thread.Abort 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
이 메서드가 호출되는 스레드에서 ThreadAbortException을 발생시켜 스레드 종료 프로세스를 시작합니다. 이 메서드를 호출하면 대개 스레드가 종료됩니다.
오버로드
Abort() |
사용되지 않습니다.
이 메서드가 호출되는 스레드에서 ThreadAbortException을 발생시켜 스레드 종료 프로세스를 시작합니다. 이 메서드를 호출하면 대개 스레드가 종료됩니다. |
Abort(Object) |
사용되지 않습니다.
이 메서드가 호출되는 스레드에서 ThreadAbortException을 발생시켜 스레드 종료 프로세스를 시작하고, 스레드 종료에 대한 예외 정보를 제공합니다. 이 메서드를 호출하면 대개 스레드가 종료됩니다. |
설명
중요
Thread.Abort
메서드는 주의해서 사용해야 합니다. 특히 현재 스레드가 아닌 스레드를 중단하기 위해 호출하는 경우 이 throw될 때 실행되거나 실행되지 못한 코드를 알 수 ThreadAbortException 없습니다. 또한 애플리케이션의 상태 또는 유지를 담당하는 애플리케이션 및 사용자 상태를 확신할 수 없습니다. 예를 들어 를 호출하면 Thread.Abort
정적 생성자가 실행되거나 관리되지 않는 리소스가 해제되지 않을 수 있습니다.
Abort()
주의
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
애플리케이션 코드에서 발견 될 수 있는 특별 한 예외는 이지만 끝날 때 다시 throw 합니다 catch
경우가 아니면 차단 ResetAbort 라고 합니다. ResetAbort
는 중단 요청을 취소하고 가 ThreadAbortException
스레드를 종료하지 못하도록 합니다. 실행되지 않은 finally
블록은 스레드가 중단되기 전에 실행됩니다.
참고
스레드가 자체에서 를 호출하는 Abort
경우 효과는 예외를 throw하는 것과 유사합니다. ThreadAbortException 즉, 가 즉시 발생하고 결과를 예측할 수 있습니다. 그러나 한 스레드가 다른 스레드에서 를 호출하는 경우 Abort
중단은 실행 중인 코드를 중단합니다. 정적 생성자가 중단될 수도 있습니다. 드문 경우에서 해당 애플리케이션 도메인에서 생성 되 고 해당 클래스의 인스턴스 못할 수도 있습니다. .NET Framework 버전 1.0 및 1.1에서는 블록이 실행되는 동안 스레드가 중단될 수 finally
있으며, 이 경우 finally
블록이 중단됩니다.
스레드가 즉시 또는 전혀 중단되지는 않습니다. 이 상황은 스레드가 중단 프로시저의 일부로 호출되는 블록에서 무제한 계산을 수행하여 중단을 무기한 지연시키는 경우에 발생할 수 finally
있습니다. 스레드가 중단될 때까지 기다리려면 Join 메서드를 호출한 후 스레드에서 메서드를 호출할 수 Abort 있지만 대기가 종료될 것이라는 보장은 없습니다.
참고
Abort중단되는 스레드가 블록, 블록 또는 제한된 실행 영역과 같은 보호된 코드 영역에 있는 경우 를 호출하는 스레드가 차단될 수 catch
finally
있습니다. 를 호출하는 스레드가 Abort 중단된 스레드에 필요한 잠금을 보유하는 경우 교착 상태가 발생할 수 있습니다.
가 시작되지 않은 스레드에서 를 호출하면 가 Abort
호출될 때 Start 스레드가 중단됩니다. Abort
가 차단되거나 절전 모드인 스레드에서 가 호출되면 스레드가 중단된 다음 중단됩니다.
가 Abort
일시 중단된 스레드에서 호출되면 를 ThreadStateException 호출한 스레드에서 이 Abort AbortRequested throw되고 ThreadState 중단되는 스레드의 속성에 추가됩니다. ThreadAbortException가 호출될 때까지 일시 중단된 스레드에서 이 throw되지 Resume 않습니다.
관리되는 Abort
스레드에서 비관리 코드를 실행하는 동안 가 호출되면 ThreadAbortException
스레드가 관리 코드로 돌아갈 때까지 이 throw되지 않습니다.
두 Abort
호출이 동시에 수행되는 경우 한 호출에서 상태 정보를 설정하고 다른 호출에서 를 실행할 수 Abort
있습니다. 그러나 애플리케이션이이 상황을 검색할 수 없습니다.
Abort
가 스레드에서 호출되면 스레드의 상태에 가 AbortRequested 포함됩니다. 에 대한 성공적인 호출의 결과로 스레드가 종료된 후 Abort
스레드의 상태가 로 변경됩니다. Stopped 충분한 권한이 있는 경우 의 대상인 스레드는 Abort
메서드를 사용하여 중단을 취소할 수 ResetAbort
있습니다. 메서드를 호출하는 방법을 보여 주는 예제는 ResetAbort
ThreadAbortException
클래스를 참조하세요.
추가 정보
적용 대상
Abort(Object)
주의
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 namespace System;
using namespace System::Threading;
ref class Test
{
private:
Test(){}
public:
static void TestMethod()
{
try
{
while ( true )
{
Console::WriteLine( "New thread running." );
Thread::Sleep( 1000 );
}
}
catch ( ThreadAbortException^ abortException )
{
Console::WriteLine( dynamic_cast<String^>(abortException->ExceptionState) );
}
}
};
int main()
{
Thread^ newThread = gcnew Thread( gcnew ThreadStart( &Test::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." );
}
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);
}
}
}
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 합니다.
스레드에 대해이 메서드를 호출 하면 시스템에서 스레드의를 throw ThreadAbortException 하 여 스레드를 중단 합니다. ThreadAbortException
애플리케이션 코드에서 발견 될 수 있는 특별 한 예외는 이지만 끝날 때 다시 throw 합니다 catch
경우가 아니면 차단 ResetAbort 라고 합니다. ResetAbort
중단할 요청을 취소 하 고가 스레드를 종료 하지 않도록 합니다 ThreadAbortException
. 명령의 finally
블록은 스레드가 중단 되기 전에 실행 됩니다.
참고
스레드가 자체에서를 호출 하는 경우에는 예외를 throw 하는 것과 Abort
비슷한 결과가 발생 합니다 .가 ThreadAbortException 즉시 발생 하 고 결과를 예측할 수 있습니다. 그러나 한 스레드가 다른 스레드에서를 호출 하 Abort
는 경우 abort는 실행 중인 코드를 모두 중단 합니다. 정적 생성자를 중단할 수 있습니다. 드문 경우에서 해당 애플리케이션 도메인에서 생성 되 고 해당 클래스의 인스턴스 못할 수도 있습니다. .NET Framework 버전 1.0 및 1.1에서는 블록이 실행 되는 동안 스레드가 중단 될 수 있으며,이 finally
경우 finally
블록이 중단 됩니다.
스레드가 즉시 중단 되거나 전혀 중단 되지 않을 수도 있습니다. 이 상황은 스레드가 finally
중단 프로시저의 일부로 호출 되는 블록에서 제한 없는 계산을 수행 하 여 중단을 무기한 지연 하는 경우에 발생할 수 있습니다. 스레드가 중단 될 때까지 대기 하려면 Join 메서드를 호출한 후에 스레드에서 메서드를 호출할 수 Abort 있지만 대기가 종료 될 수 있는 것은 아닙니다.
참고
을 호출 하는 스레드는 중단 되는 Abort 스레드가 catch
블록, finally
블록 또는 제약이 있는 실행 영역과 같은 보호 되는 코드 영역에 있는 경우 차단 될 수 있습니다. 을 호출 하는 스레드가 Abort 중단 된 스레드에 필요한 잠금을 보유 하는 경우 교착 상태가 발생할 수 있습니다.
Abort
이 시작 되지 않은 스레드에서를 호출 하면가 호출 될 때 스레드가 중단 됩니다 Start . Abort
차단 되었거나 중지 된 스레드에서가 호출 되 면 스레드가 중단 된 다음 중단 됩니다.
Abort
일시 중단 된 스레드에서가 호출 되 면이 ThreadStateException 호출 된 스레드에서이 throw 되며 Abort AbortRequested ThreadState 중단 중인 스레드의 속성에가 추가 됩니다. ThreadAbortException가 호출 될 때까지 일시 중단 된 스레드에서이 throw 되지 않습니다 Resume .
관리 되는 Abort
스레드에서 비관리 코드를 실행 하는 동안를 호출 하는 경우 ThreadAbortException
스레드가 관리 코드로 반환 될 때까지이 throw 되지 않습니다.
두 호출이 동시에 발생 하는 경우 한 번의 호출로 Abort
상태 정보를 설정 하 고 다른 호출을 실행 하 여를 실행할 수 있습니다 Abort
. 그러나 애플리케이션이이 상황을 검색할 수 없습니다.
Abort
가 스레드에서 호출 된 후 스레드의 상태에는가 포함 됩니다 AbortRequested . 를 성공적으로 호출한 결과로 스레드가 종료 Abort
되 면 스레드의 상태가로 변경 됩니다 Stopped . 충분 한 권한이 있는 경우의 대상인 스레드는 Abort
메서드를 사용 하 여 중단을 취소할 수 있습니다 ResetAbort
. 메서드를 호출 하는 방법을 보여 주는 예제는 ResetAbort
클래스를 참조 하세요 ThreadAbortException
.