Compartir vía


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.

Vea también