다음을 통해 공유


Thread.Abort 메서드

정의

스레드를 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 호출AbortThreadStateException 스레드에서 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 호출AbortThreadStateException 스레드에서 throw되고 AbortRequested 중단되는 스레드의 속성에 추가 ThreadState 됩니다. A ThreadAbortException 는 호출될 때까지 Resume 일시 중단된 스레드에서 throw되지 않습니다.

관리되지 않는 코드를 ThreadAbortException 실행하는 동안 관리되는 스레드에서 호출되는 경우 Abort 스레드가 관리 코드로 반환될 때까지 throw되지 않습니다.

두 개의 호출 Abort 이 동시에 올 경우 한 호출에서 상태 정보를 설정하고 다른 호출은 실행할 Abort수 있습니다. 그러나 애플리케이션은 이 상황을 감지할 수 없습니다.

스레드에서 호출된 후에 Abort 는 스레드 상태가 포함됩니다 AbortRequested. 스레드가 성공적으로 호출 Abort된 결과로 종료되면 스레드의 상태가 .로 변경됩니다 Stopped. 충분한 사용 권한을 가진 스레드는 메서드를 Abort 사용하여 ResetAbort 중단을 취소할 수 있습니다. 메서드 호출을 보여 주는 예제는 ResetAbort 클래스를 참조하세요 ThreadAbortException .

추가 정보

적용 대상