Thread.Abort Yöntem

Tanım

İş parçacığını sonlandırma işlemini başlatmak için çağrıldığı iş parçacığında bir ThreadAbortException oluşturur. Bu yöntemin çağrılması genellikle iş parçacığını sonlandırır.

Aşırı Yüklemeler

Abort()
Geçersiz.

İş parçacığını sonlandırma işlemini başlatmak için çağrıldığı iş parçacığında bir ThreadAbortException oluşturur. Bu yöntemin çağrılması genellikle iş parçacığını sonlandırır.

Abort(Object)
Geçersiz.

İş parçacığını sonlandırma işlemini başlatmak ve iş parçacığı sonlandırma hakkında özel durum bilgileri sağlamak için çağrıldığı iş parçacığında bir ThreadAbortException oluşturur. Bu yöntemin çağrılması genellikle iş parçacığını sonlandırır.

Açıklamalar

Önemli

Thread.Abort yöntemini dikkatli kullanın. Özellikle geçerli iş parçacığı dışında bir iş parçacığını durdurmak için çağırdığınızda, hangi kodun yürütüldiğini veya ne zaman ThreadAbortException yürütülediğini bilemezsinsiniz. Ayrıca uygulamanızın durumundan veya korumadan sorumlu olduğu herhangi bir uygulama ve kullanıcı durumundan da emin olamazsınız. Örneğin, çağrı statik Thread.Abort oluşturucuların yürütülmesini veya yönetilen veya yönetilmeyen kaynakların yayınlanmasını engelleyebilir.

Abort()

Kaynak:
Thread.cs
Kaynak:
Thread.cs
Kaynak:
Thread.cs

Dikkat

Thread.Abort is not supported and throws PlatformNotSupportedException.

İş parçacığını sonlandırma işlemini başlatmak için çağrıldığı iş parçacığında bir ThreadAbortException oluşturur. Bu yöntemin çağrılması genellikle iş parçacığını sonlandırır.

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 ()
Öznitelikler

Özel durumlar

Yalnızca .NET Core ve .NET 5+ : Her durumda.

Çağıranın gerekli izni yok.

Durdurulan iş parçacığı şu anda askıya alınmış durumda.

Açıklamalar

Bu yöntem kullanımdan kaldırıldı. .NET 5 ve sonraki sürümlerde, bu yöntemin çağrılması bir derleme zamanı uyarısı oluşturur. Bu yöntem ,NET 5 ve üzeri ile .NET Core'da çalışma zamanında oluşturur PlatformNotSupportedException .

Bu yöntem bir iş parçacığında çağrıldığında, sistem bunu durdurmak için iş parçacığında bir ThreadAbortException oluşturur. ThreadAbortExceptionuygulama kodu tarafından yakalanabilen ancak çağrılmadığı sürece ResetAbort bloğun catch sonunda yeniden oluşturulabilen özel bir özel durumdur. ResetAbort durdurma isteğini iptal eder ve öğesinin ThreadAbortException iş parçacığını sonlandırmasını engeller. İş parçacığı durdurulmadan önce yürütülmeyen finally bloklar yürütülür.

Not

bir iş parçacığı kendisini çağırdığında Abort , etki bir özel durum oluşturma ile benzerdir; ThreadAbortException hemen gerçekleşir ve sonuç tahmin edilebilir olur. Ancak, bir iş parçacığı başka bir iş parçacığında çağırırsa Abort , durdurma işlemi çalıştırılan kodu kesintiye uğratır. Statik bir oluşturucuyu iptal etme olasılığı da vardır. Nadir durumlarda, bu durum söz konusu sınıfın örneklerinin söz konusu uygulama etki alanında oluşturulmasını engelleyebilir.

İş parçacığının hemen veya hiç durdurulması garanti edilmez. Bu durum, bir iş parçacığı durdurma yordamının bir parçası olarak çağrılan bloklarda finally sınırsız miktarda hesaplama yaparsa ve böylece iptali süresiz olarak geciktirirse ortaya çıkabilir. bir iş parçacığı durdurulana kadar beklemek için, yöntemini çağırdıktan sonra iş parçacığında yöntemini çağırabilirsiniz JoinAbort , ancak beklemenin biteceği garanti değildir.

Not

Durdurulan iş parçacığı kodun korumalı bir bölgesindeyse( blok, finally blok veya kısıtlanmış yürütme bölgesi gibicatch) çağıran Abort iş parçacığı engelleyebilir. Çağıran Abort iş parçacığı durdurulan iş parçacığı gerektiren bir kilit tutarsa, bir kilitlenme oluşabilir.

Başlatılmamış bir iş parçacığında çağrılırsa Abort , iş parçacığı çağrıldığında Start durdurulacaktır. Engellenen veya uyuyan bir iş parçacığında çağrılırsa Abort , iş parçacığı kesilir ve sonra durduruldu.

Askıya alınmış bir iş parçacığında çağrılırsaAbort, adlı Abortiş parçacığında bir ThreadStateException oluşturulur ve AbortRequested durdurulan iş parçacığının özelliğine ThreadState eklenir. Çağrılana kadar Resume askıya alınan iş parçacığında bir ThreadAbortException atılmaz.

Yönetilmeyen kodu yürütürken yönetilen bir iş parçacığında çağrılırsa Abort , ThreadAbortException iş parçacığı yönetilen koda dönene kadar bir atılmaz.

Aynı anda iki çağrı Abort gelirse, bir çağrının durum bilgilerini ayarlaması ve diğer çağrının yürütmesi Abortmümkündür. Ancak, bir uygulama bu durumu algılayamaz.

bir iş parçacığında çağrıldıktan sonra Abort , iş parçacığının durumu içerir AbortRequested. başarılı bir çağrısının Abortsonucu olarak iş parçacığı sonlandırıldıktan sonra, iş parçacığının durumu olarak Stoppeddeğiştirilir. Yeterli izinlerle, hedefi Abort olan bir iş parçacığı yöntemini kullanarak ResetAbort iptali iptal edebilir. yöntemini çağırmayı ResetAbort gösteren bir örnek için sınıfına ThreadAbortException bakın.

Ayrıca bkz.

Şunlara uygulanır

Abort(Object)

Kaynak:
Thread.cs
Kaynak:
Thread.cs
Kaynak:
Thread.cs

Dikkat

Thread.Abort is not supported and throws PlatformNotSupportedException.

İş parçacığını sonlandırma işlemini başlatmak ve iş parçacığı sonlandırma hakkında özel durum bilgileri sağlamak için çağrıldığı iş parçacığında bir ThreadAbortException oluşturur. Bu yöntemin çağrılması genellikle iş parçacığını sonlandırır.

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)

Parametreler

stateInfo
Object

Durdurulan iş parçacığı tarafından kullanılabilecek durum gibi uygulamaya özgü bilgiler içeren bir nesne.

Öznitelikler

Özel durumlar

Yalnızca .NET Core ve .NET 5+ : Her durumda.

Çağıranın gerekli izni yok.

Durdurulan iş parçacığı şu anda askıya alınmış durumda.

Örnekler

Aşağıdaki kod örneği, durdurulan bir iş parçacığına nasıl bilgi geçirildiğini gösterir.

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);
        }
    }
}
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

Açıklamalar

Bu yöntem kullanımdan kaldırıldı. .NET 5 ve sonraki sürümlerde, bu yöntemin çağrılması bir derleme zamanı uyarısı oluşturur. Bu yöntem ,NET 5 ve üzeri ile .NET Core'da çalışma zamanında oluşturur PlatformNotSupportedException .

Bu yöntem bir iş parçacığında çağrıldığında, sistem bunu durdurmak için iş parçacığında bir ThreadAbortException oluşturur. ThreadAbortExceptionuygulama kodu tarafından yakalanabilen ancak çağrılmadığı sürece ResetAbort bloğun catch sonunda yeniden oluşturulabilen özel bir özel durumdur. ResetAbort durdurma isteğini iptal eder ve öğesinin ThreadAbortException iş parçacığını sonlandırmasını engeller. İş parçacığı durdurulmadan önce yürütülmeyen finally bloklar yürütülür.

Not

bir iş parçacığı kendisini çağırdığında Abort , etki bir özel durum oluşturma ile benzerdir; ThreadAbortException hemen gerçekleşir ve sonuç tahmin edilebilir olur. Ancak, bir iş parçacığı başka bir iş parçacığında çağırırsa Abort , durdurma işlemi çalıştırılan kodu kesintiye uğratır. Statik bir oluşturucuyu iptal etme olasılığı vardır. Nadir durumlarda, bu durum söz konusu sınıfın örneklerinin söz konusu uygulama etki alanında oluşturulmasını engelleyebilir.

İş parçacığının hemen veya hiç durdurulması garanti edilmez. Bu durum, bir iş parçacığı durdurma yordamının bir parçası olarak çağrılan bloklarda finally sınırsız miktarda hesaplama yaparsa ve böylece iptali süresiz olarak geciktirirse ortaya çıkabilir. Bir iş parçacığı durdurulana kadar beklemek için, yöntemini çağırdıktan sonra iş parçacığında yöntemini çağırabilirsiniz JoinAbort , ancak beklemenin sona ereceğinin garantisi yoktur.

Not

Durdurulan iş parçacığı kodun korumalı bir bölgesindeyse( blok, finally blok veya kısıtlanmış yürütme bölgesi gibicatch) çağıran Abort iş parçacığı engelleyebilir. Çağıran Abort iş parçacığı durdurulan iş parçacığı gerektiren bir kilit tutarsa, bir kilitlenme oluşabilir.

Başlatılmamış bir iş parçacığında çağrılırsa Abort , iş parçacığı çağrıldığında Start durdurulacaktır. Engellenen veya uyuyan bir iş parçacığında çağrılırsa Abort , iş parçacığı kesilir ve sonra durduruldu.

Askıya alınmış bir iş parçacığında çağrılırsaAbort, adlı Abortiş parçacığında bir ThreadStateException oluşturulur ve AbortRequested durdurulan iş parçacığının özelliğine ThreadState eklenir. Çağrılana kadar Resume askıya alınan iş parçacığında bir ThreadAbortException atılmaz.

Yönetilmeyen kodu yürütürken yönetilen bir iş parçacığında çağrılırsa Abort , ThreadAbortException iş parçacığı yönetilen koda dönene kadar bir atılmaz.

Aynı anda iki çağrı Abort gelirse, bir çağrının durum bilgilerini ayarlaması ve diğer çağrının yürütmesi Abortmümkündür. Ancak, bir uygulama bu durumu algılayamaz.

bir iş parçacığında çağrıldıktan sonra Abort , iş parçacığının durumu içerir AbortRequested. başarılı bir çağrısının Abortsonucu olarak iş parçacığı sonlandırıldıktan sonra, iş parçacığının durumu olarak Stoppeddeğiştirilir. Yeterli izinlerle, hedefi Abort olan bir iş parçacığı yöntemini kullanarak ResetAbort iptali iptal edebilir. yöntemini çağırmayı ResetAbort gösteren bir örnek için sınıfına ThreadAbortException bakın.

Ayrıca bkz.

Şunlara uygulanır