Ler en inglés

Compartir por


Thread.Abort Método

Definición

Genera un ThreadAbortException en el subproceso en el que se invoca para comenzar el proceso de terminación del subproceso. Normalmente, una llamada a este método finaliza el subproceso.

Sobrecargas

Abort()
Obsoletos.

Produce una excepción ThreadAbortException en el subproceso en el que se invoca, para iniciar el proceso de finalización del subproceso. Normalmente, una llamada a este método finaliza el subproceso.

Abort(Object)
Obsoletos.

Produce una excepción ThreadAbortException en el subproceso en el que se invoca, para iniciar el proceso de finalización del subproceso, proporcionando al mismo tiempo información sobre excepciones relativa a la terminación del subproceso. Normalmente, una llamada a este método finaliza el subproceso.

Comentarios

Importante

Use el Thread.Abort método con precaución. Especialmente cuando se llama para anular un subproceso distinto del subproceso actual, no se sabe qué código se ha ejecutado o no se pudo ejecutar cuando se produce .ThreadAbortException Tampoco puede saberse a ciencia cierta el estado de la aplicación o de cualquier aplicación y estado de usuario que sea responsable de su conservación. Por ejemplo, una llamada a Thread.Abort puede evitar la ejecución de constructores estáticos o la liberación de recursos administrados o no administrados.

Abort()

Source:
Thread.cs
Source:
Thread.cs
Source:
Thread.cs

Precaución

Thread.Abort is not supported and throws PlatformNotSupportedException.

Produce una excepción ThreadAbortException en el subproceso en el que se invoca, para iniciar el proceso de finalización del subproceso. Normalmente, una llamada a este método finaliza el subproceso.

C#
[System.Obsolete("Thread.Abort is not supported and throws PlatformNotSupportedException.", DiagnosticId="SYSLIB0006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public void Abort();
C#
public void Abort();
Atributos

Excepciones

.NET Core y .NET 5+ solo: En todos los casos.

El llamador no dispone del permiso requerido.

Actualmente se suspende el subproceso que se está anulando.

Comentarios

Este método está obsoleto. En .NET 5 y versiones posteriores, al llamar a este método se genera una advertencia en tiempo de compilación. Este método produce una PlatformNotSupportedException excepción en tiempo de ejecución en .NET 5 y versiones posteriores y .NET Core.

Cuando se invoca este método en un subproceso, el sistema inicia un ThreadAbortException elemento en el subproceso para anularlo. ThreadAbortException es una excepción especial que el código de aplicación puede detectar, pero se vuelve a iniciar al final del catch bloque a menos ResetAbort que se llame a . ResetAbort cancela la solicitud para anularla e impide que ThreadAbortException termine el subproceso. Los bloques sin ejecutar finally se ejecutan antes de que se anule el subproceso.

Nota

Cuando un subproceso llama Abort a sí mismo, el efecto es similar a producir una excepción; esto ThreadAbortException sucede inmediatamente y el resultado es predecible. Sin embargo, si un subproceso llama Abort a en otro subproceso, la anulación interrumpe cualquier código que se esté ejecutando. También existe la posibilidad de que se pueda anular un constructor estático. En raras ocasiones, esto podría impedir que las instancias de esa clase se creen en ese dominio de aplicación.

No se garantiza que el subproceso se anule inmediatamente o en absoluto. Esta situación puede producirse si un subproceso realiza una cantidad de cálculo sin enlazar en los bloques a los finally que se llama como parte del procedimiento de anulación, lo que retrasa indefinidamente la anulación. Para esperar hasta que se haya anulado un subproceso, puede llamar al Join método en el subproceso después de llamar al Abort método , pero no hay ninguna garantía de que finalice la espera.

Nota

El subproceso que llama Abort podría bloquearse si el subproceso que se está anulando está en una región protegida de código, como un catch bloque, finally un bloque o una región de ejecución restringida. Si el subproceso que llama a Abort contiene un bloqueo que requiere el subproceso anulado, se puede producir un interbloqueo.

Si Abort se llama a en un subproceso que no se ha iniciado, el subproceso se anulará cuando Start se llame a . Si Abort se llama a en un subproceso bloqueado o en suspensión, el subproceso se interrumpe y, a continuación, se anula.

Si Abort se llama a en un subproceso suspendido, se produce una ThreadStateException excepción en el subproceso que llamó Aborta y AbortRequested se agrega a la ThreadState propiedad del subproceso que se está anulando. ThreadAbortException No se inicia en el subproceso suspendido hasta Resume que se llama a .

Si Abort se llama a en un subproceso administrado mientras se ejecuta código no administrado, no se inicia hasta ThreadAbortException que el subproceso vuelve al código administrado.

Si se realizan dos llamadas al Abort mismo tiempo, es posible que una llamada establezca la información de estado y la otra llamada para ejecutar .Abort Sin embargo, una aplicación no puede detectar esta situación.

Después Abort de invocarse en un subproceso, el estado del subproceso incluye AbortRequested. Una vez finalizado el subproceso como resultado de una llamada correcta a Abort, el estado del subproceso se cambia a Stopped. Con permisos suficientes, un subproceso que es el destino de un Abort puede cancelar la anulación mediante el ResetAbort método . Para ver un ejemplo que muestra cómo llamar al ResetAbort método , vea la ThreadAbortException clase .

Consulte también

Se aplica a

.NET 9 e outras versións
Produto Versións (Obsoleto)
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1 (5, 6, 7, 8, 9)
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

Abort(Object)

Source:
Thread.cs
Source:
Thread.cs
Source:
Thread.cs

Precaución

Thread.Abort is not supported and throws PlatformNotSupportedException.

Produce una excepción ThreadAbortException en el subproceso en el que se invoca, para iniciar el proceso de finalización del subproceso, proporcionando al mismo tiempo información sobre excepciones relativa a la terminación del subproceso. Normalmente, una llamada a este método finaliza el subproceso.

C#
[System.Obsolete("Thread.Abort is not supported and throws PlatformNotSupportedException.", DiagnosticId="SYSLIB0006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public void Abort(object? stateInfo);
C#
public void Abort(object stateInfo);
C#
public void Abort(object? stateInfo);

Parámetros

stateInfo
Object

Objeto que contiene información específica de la aplicación como, por ejemplo, su estado, y que el subproceso anulado puede utilizar.

Atributos

Excepciones

.NET Core y .NET 5+ solo: En todos los casos.

El llamador no dispone del permiso requerido.

Actualmente se suspende el subproceso que se está anulando.

Ejemplos

En el ejemplo de código siguiente se muestra cómo pasar información a un subproceso que se está anulando.

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

Comentarios

Este método está obsoleto. En .NET 5 y versiones posteriores, al llamar a este método se genera una advertencia en tiempo de compilación. Este método produce una PlatformNotSupportedException excepción en tiempo de ejecución en .NET 5 y versiones posteriores y .NET Core.

Cuando se invoca este método en un subproceso, el sistema inicia un ThreadAbortException elemento en el subproceso para anularlo. ThreadAbortException es una excepción especial que el código de aplicación puede detectar, pero se vuelve a iniciar al final del catch bloque a menos ResetAbort que se llame a . ResetAbort cancela la solicitud para anularla e impide que ThreadAbortException termine el subproceso. Los bloques sin ejecutar finally se ejecutan antes de que se anule el subproceso.

Nota

Cuando un subproceso llama Abort a sí mismo, el efecto es similar a producir una excepción; esto ThreadAbortException sucede inmediatamente y el resultado es predecible. Sin embargo, si un subproceso llama Abort a en otro subproceso, la anulación interrumpe cualquier código que se esté ejecutando. Existe la posibilidad de que se pueda anular un constructor estático. En raras ocasiones, esto podría impedir que las instancias de esa clase se creen en ese dominio de aplicación.

No se garantiza que el subproceso se anule inmediatamente o en absoluto. Esta situación puede producirse si un subproceso realiza una cantidad de cálculo sin enlazar en los bloques a los finally que se llama como parte del procedimiento de anulación, lo que retrasa indefinidamente la anulación. Para esperar hasta que se haya anulado un subproceso, puede llamar al Join método en el subproceso después de llamar al Abort método , pero no hay ninguna garantía de que finalice la espera.

Nota

El subproceso que llama Abort podría bloquearse si el subproceso que se está anulando está en una región protegida de código, como un catch bloque, finally un bloque o una región de ejecución restringida. Si el subproceso que llama a Abort contiene un bloqueo que requiere el subproceso anulado, se puede producir un interbloqueo.

Si Abort se llama a en un subproceso que no se ha iniciado, el subproceso se anulará cuando Start se llame a . Si Abort se llama a en un subproceso bloqueado o en suspensión, el subproceso se interrumpe y, a continuación, se anula.

Si Abort se llama a en un subproceso suspendido, se produce una ThreadStateException excepción en el subproceso que llamó Aborta y AbortRequested se agrega a la ThreadState propiedad del subproceso que se está anulando. ThreadAbortException No se inicia en el subproceso suspendido hasta Resume que se llama a .

Si Abort se llama a en un subproceso administrado mientras se ejecuta código no administrado, no se inicia hasta ThreadAbortException que el subproceso vuelve al código administrado.

Si se realizan dos llamadas al Abort mismo tiempo, es posible que una llamada establezca la información de estado y la otra llamada para ejecutar .Abort Sin embargo, una aplicación no puede detectar esta situación.

Después Abort de invocarse en un subproceso, el estado del subproceso incluye AbortRequested. Una vez finalizado el subproceso como resultado de una llamada correcta a Abort, el estado del subproceso se cambia a Stopped. Con permisos suficientes, un subproceso que es el destino de un Abort puede cancelar la anulación mediante el ResetAbort método . Para ver un ejemplo que muestra cómo llamar al ResetAbort método , vea la ThreadAbortException clase .

Consulte también

Se aplica a

.NET 9 e outras versións
Produto Versións (Obsoleto)
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1 (5, 6, 7, 8, 9)
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1