Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Las Thread.Abort API están obsoletas. Los proyectos que tienen como destino .NET 5 o una versión posterior encontrarán una advertencia SYSLIB0006
en tiempo de compilación si se llama a estos métodos.
Descripción del cambio
Anteriormente, las llamadas a Thread.Abort no producían advertencias en tiempo de compilación, pero el método sí producía una excepción PlatformNotSupportedException en tiempo de ejecución.
A partir de .NET 5, Thread.Abort se marca como obsoleto con advertencia. Al llamar a este método, se genera la advertencia SYSLIB0006
del compilador . La implementación del método no cambia y continúa generando una excepción PlatformNotSupportedException.
Motivo del cambio
Dado que Thread.Abort siempre produce una excepción PlatformNotSupportedException en todas las implementaciones de .NET, excepto en .NET Framework, se ha agregado ObsoleteAttribute al método para avisar en los lugares donde se llama a este.
Cuando llamas a Thread.Abort para anular un subproceso distinto del subproceso actual, no sabes qué código se ha ejecutado o ha fallado al ejecutarse cuando se lanza ThreadAbortException. Tampoco puede estar seguro del estado de su aplicación, ni de cualquier estado de aplicación o usuario que deba preservar. Por ejemplo, llamar Thread.Abort puede impedir la ejecución de constructores estáticos o la liberación de recursos administrados o no administrados. Por este motivo, Thread.Abort siempre lanza un PlatformNotSupportedException en .NET Core y .NET 5+.
Versión introducida
5.0
Acción recomendada
Utiliza CancellationToken para abortar el procesamiento de una unidad de trabajo en lugar de llamar a Thread.Abort. En el ejemplo siguiente se muestra el uso de CancellationToken.
void ProcessPendingWorkItemsNew(CancellationToken cancellationToken) { if (QueryIsMoreWorkPending()) { // If the CancellationToken is marked as "needs to cancel", // this will throw the appropriate exception. cancellationToken.ThrowIfCancellationRequested(); WorkItem work = DequeueWorkItem(); ProcessWorkItem(work); } }
Para más información, consulte Cancelación de subprocesos administrados.
Para suprimir la advertencia en tiempo de compilación, suprima el código
SYSLIB0006
de advertencia . El código de advertencia es específico de Thread.Abort y suprimirlo no suprime otras advertencias de obsolescencia en tu código. Pero se recomienda que elimine las llamadas a Thread.Abort en lugar de suprimir la advertencia.void MyMethod() { #pragma warning disable SYSLIB0006 Thread.CurrentThread.Abort(); #pragma warning restore SYSLIB0006 }
También puede suprimir la advertencia en el archivo del proyecto.
<PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net5.0</TargetFramework> <!-- Disable "Thread.Abort is obsolete" warnings for entire project. --> <NoWarn>$(NoWarn);SYSLIB0006</NoWarn> </PropertyGroup>