다음을 통해 공유


Thread.Abort 메서드

정의

이 메서드가 호출되는 스레드에서 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 .

추가 정보

적용 대상