Compartilhar via


SYSLIB0006: Não há suporte para Thread.Abort

A partir o .NET 5, as APIS a seguir são marcadas como obsoletas. O uso dessas APIs gera avisos SYSLIB0006 no tempo de compilação e PlatformNotSupportedException no tempo de execução.

Quando você chama Thread.Abort para anular um thread diferente do atual, não sabe qual código foi ou não executado quando o erro ThreadAbortException é gerado. Você também não tem certeza sobre o estado do seu aplicativo ou de qualquer outro, e estado do usuário que ele é responsável por preservar. Por exemplo, a chamada de Thread.Abort pode impedir a execução de construtores estáticos ou a liberação de recursos gerenciados ou não gerenciados. Por esse motivo, Thread.Abort sempre lança um erro PlatformNotSupportedException .NET Core e no .NET 5+.

Soluções Alternativas

Use um CancellationToken para anular o processamento de uma unidade de trabalho, em vez de chamar Thread.Abort. O exemplo a seguir ilustra o 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);
    }
}

Suprimir um aviso

Se for necessário usar as APIs obsoletas, você poderá suprimir o aviso no código ou no arquivo de projeto.

Para suprimir apenas uma violação única, adicione as diretivas de pré-processador ao arquivo de origem para desabilitar e, em seguida, reabilite o aviso.

// Disable the warning.
#pragma warning disable SYSLIB0006

// Code that uses obsolete API.
// ...

// Re-enable the warning.
#pragma warning restore SYSLIB0006

Para suprimir todos os avisos SYSLIB0006 no projeto, adicione uma propriedade <NoWarn> ao arquivo de projeto.

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
   ...
   <NoWarn>$(NoWarn);SYSLIB0006</NoWarn>
  </PropertyGroup>
</Project>

Para obter mais informações, confira Suprimir avisos.

Confira também