Compartir a través de


SYSLIB0006: Thread.Abort no se admite

Las SIGUIENTES API están marcadas como obsoletas, a partir de .NET 5. El uso de estas APIs genera una advertencia SYSLIB0006 en tiempo de compilación y PlatformNotSupportedException en tiempo de ejecución.

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+.

Soluciones alternativas

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

Supresión de una advertencia

Si debe usar las API obsoletas, puede suprimir la advertencia en el código o en el archivo del proyecto.

Para suprimir solo una infracción, agregue directivas de preprocesador al archivo de origen para deshabilitar y 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 SYSLIB0006 advertencias del proyecto, agregue una <NoWarn> propiedad 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.

Consulte también