Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
As Thread.Abort APIs são obsoletas. Os projetos que têm como alvo o .NET 5 ou uma versão posterior encontrarão um aviso de tempo de compilação SYSLIB0006 se esses métodos forem chamados.
Descrição da alteração
Anteriormente, as chamadas para Thread.Abort não produziam avisos de tempo de compilação, mas o método gerava um PlatformNotSupportedException em tempo de execução.
A partir do .NET 5, Thread.Abort é marcado como obsoleto como aviso. Chamar esse método produz um aviso SYSLIB0006do compilador. A implementação do método não foi alterada e continua a gerar um PlatformNotSupportedException.
Motivo da alteração
Dado que Thread.Abort sempre lança um PlatformNotSupportedException em todas as implementações do .NET, exceto .NET Framework, ObsoleteAttribute foi adicionado ao método para chamar a atenção para os lugares em que ele é chamado.
Ao chamar Thread.Abort para anular um thread diferente do atual, você não sabe qual código foi executado ou não foi quando o erro ThreadAbortException é gerado. Você também não pode ter certeza do estado do seu aplicativo ou de qualquer outro aplicativo e do estado do usuário que ele seja responsável por preservar. Por exemplo, a chamada 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 PlatformNotSupportedException no .NET Core e .NET 5+.
Versão introduzida
5,0
Ação recomendada
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); } }Para saber mais, confira Cancelamento em threads gerenciados.
Para suprimir o aviso de tempo de compilação, suprime o código
SYSLIB0006de aviso. O código de aviso é específico ao Thread.Abort e a sua supressão não afeta outros avisos de obsolescência no seu código. No entanto, recomendamos que você remova as chamadas para Thread.Abort em vez de suprimir o aviso.void MyMethod() { #pragma warning disable SYSLIB0006 Thread.CurrentThread.Abort(); #pragma warning restore SYSLIB0006 }Você também pode suprimir o aviso no arquivo de projeto.
<PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net5.0</TargetFramework> <!-- Disable "Thread.Abort is obsolete" warnings for entire project. --> <NoWarn>$(NoWarn);SYSLIB0006</NoWarn> </PropertyGroup>