SYSLIB0006: Thread.Abort non è supportato
Le API seguenti sono contrassegnate come obsolete, a partire da .NET 5. L'uso di queste API genera un avviso SYSLIB0006
in fase di compilazione e PlatformNotSupportedException in fase di esecuzione.
Quando si chiama Thread.Abort per interrompere un thread diverso dal thread corrente, non si sa quale codice è stato eseguito o non è riuscito a eseguire quando viene generato ThreadAbortException. Non è inoltre possibile essere certi dello stato dell'applicazione o di qualsiasi applicazione e stato utente responsabile del mantenimento. Ad esempio, la chiamata Thread.Abort può impedire l'esecuzione di costruttori statici o il rilascio di risorse gestite o non gestite. Per questo motivo, Thread.Abort genera sempre un'eccezione PlatformNotSupportedException su .NET Core e .NET 5+.
Soluzioni alternative
Usare un oggetto CancellationToken per interrompere l'elaborazione di un'unità di lavoro anziché chiamare Thread.Abort. Nell'esempio riportato di seguito viene illustrato l'utilizzo di 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);
}
}
Eliminare un avviso
Se è necessario usare le API obsolete, è possibile eliminare l'avviso nel codice o nel file di progetto.
Per eliminare solo una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare l'avviso.
// Disable the warning.
#pragma warning disable SYSLIB0006
// Code that uses obsolete API.
// ...
// Re-enable the warning.
#pragma warning restore SYSLIB0006
Per eliminare tutti gli avvisi SYSLIB0006
nel progetto, aggiungere una proprietà <NoWarn>
al file di progetto.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<NoWarn>$(NoWarn);SYSLIB0006</NoWarn>
</PropertyGroup>
</Project>
Per altre informazioni, vedere Eliminare gli avvisi.