SYSLIB0006: Thread.Abort no se admite
Las siguientes API se han marcado como obsoletas a partir de .NET 5. El uso de estas API genera una advertencia SYSLIB0006
en tiempo de compilación y una excepción PlatformNotSupportedException en tiempo de ejecución.
Cuando se llama a Thread.Abort para anular un subproceso distinto del actual, no se sabe qué código se ha ejecutado o no se ha podido ejecutar al iniciarse la excepción 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. Por este motivo, Thread.Abort siempre inicia una excepción PlatformNotSupportedException en .NET Core y .NET 5 o versiones posteriores.
Soluciones alternativas
Use un token ce cancelación (CancellationToken) para anular el procesamiento de una unidad de trabajo en lugar de llamar a Thread.Abort. En el siguiente ejemplo 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);
}
}
Supresión de una advertencia
Si tiene que seguir usando las API obsoletas, puede suprimir la advertencia en el código o en el archivo de proyecto.
Para suprimir solo una infracción, agregue directivas de preprocesador al archivo de origen para deshabilitar y luego volver a habilitar la advertencia.
// Disable the warning.
#pragma warning disable SYSLIB0006
// Code that uses obsolete API.
// ...
// Re-enable the warning.
#pragma warning restore SYSLIB0006
Para suprimir todas las advertencias SYSLIB0006
del proyecto, agregue una propiedad <NoWarn>
al archivo del proyecto.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<NoWarn>$(NoWarn);SYSLIB0006</NoWarn>
</PropertyGroup>
</Project>
Para obtener más información, vea Suprimir advertencias.