Thread.Abort está obsoleto
As Thread.Abort APIs estão obsoletas. Projetos destinados ao .NET 5 ou uma versão posterior encontrarão aviso SYSLIB0006
em tempo de compilação se esses métodos forem chamados.
Alterar a descrição
Anteriormente, as chamadas para Thread.Abort não produziam avisos em tempo de compilação, no entanto, o método lançava um PlatformNotSupportedException em tempo de execução.
A partir do .NET 5, Thread.Abort é marcado como obsoleto como aviso. Chamar esse método produz aviso do SYSLIB0006
compilador . A implementação do método permanece inalterada e continua a lançar um PlatformNotSupportedException.
Razão para a alteração
Dado que Thread.Abort sempre lança um PlatformNotSupportedException em todas as implementações .NET, exceto .NET Framework, ObsoleteAttribute foi adicionado ao método para chamar a atenção para os locais onde ele é chamado.
Quando você chama Thread.Abort para anular um thread diferente do thread atual, você não sabe qual código foi executado ou falhou em executar quando o ThreadAbortException é lançado. Você também não pode ter certeza do estado do seu aplicativo ou de qualquer aplicativo e estado do usuário que ele é responsável pela preservação. 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 a CancellationToken para cancelar 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 obter mais informações, consulte Cancelamento em threads gerenciados.
Para suprimir o aviso em tempo de compilação, suprima o código
SYSLIB0006
de aviso . O código de aviso é específico e Thread.Abort suprimi-lo não suprime outros avisos de obsolescência em 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>