Thread.Abort Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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.
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 ()
- 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
- ThreadAbortException
- Aborted
- AbortRequested
- Subprocesos y subprocesamiento
- Uso de subprocesos y subprocesamiento
- Destrucción de subprocesos
Se aplica a
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.
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)
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.
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
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
- ThreadAbortException
- Aborted
- AbortRequested
- Subprocesos y subprocesamiento
- Uso de subprocesos y subprocesamiento
- Destrucción de subprocesos