Zastaralá metoda Thread.Abort
Rozhraní Thread.Abort API jsou zastaralá. Projekty, které cílí na .NET 5 nebo novější verzi, narazí na upozornění SYSLIB0006
v době kompilace, pokud se tyto metody volají.
Změna popisu
Dříve volání, která Thread.Abort nevytvářela upozornění v době kompilace, ale metoda vyvolá PlatformNotSupportedException za běhu.
Počínaje verzí .NET 5 Thread.Abort je označený jako upozornění. Volání této metody vytvoří upozornění SYSLIB0006
kompilátoru . Implementace metody je nezměněna a pokračuje v vyvolání PlatformNotSupportedException.
Důvod změny
Vzhledem k tomu, že Thread.Abort vždy vyvolává PlatformNotSupportedException všechny implementace .NET s výjimkou rozhraní .NET Framework, ObsoleteAttribute byla přidána do metody, aby upoutat pozornost na místa, kde je volána.
Když zavoláte Thread.Abort přerušení vlákna jiného než aktuálního vlákna, nevíte, jaký kód se spustil nebo se nepodařilo provést při ThreadAbortException vyvolání. Také nemůžete mít jistotu o stavu vaší aplikace nebo žádné aplikace a stavu uživatele, za které odpovídá za zachování. Volání Thread.Abort může například zabránit spuštění statických konstruktorů nebo uvolnění spravovaných nebo nespravovaných prostředků. Z tohoto důvodu Thread.Abort vždy vyvolá výjimku PlatformNotSupportedException pro .NET Core a .NET 5 nebo novější.
Zavedená verze
5,0
Doporučená akce
CancellationToken Použití k přerušení zpracování jednotky práce místo volání Thread.Abort. Následující příklad ilustruje použití 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); } }
Další informace najdete v tématu Zrušení ve spravovaných vláknech.
Chcete-li potlačit upozornění v době kompilace, potlačit kód
SYSLIB0006
upozornění . Kód upozornění je specifický pro Thread.Abort a potlačuje ho, ale nepotlačí další upozornění na obsoletion ve vašem kódu. Místo potlačení upozornění však doporučujeme odebrat volání Thread.Abort .void MyMethod() { #pragma warning disable SYSLIB0006 Thread.CurrentThread.Abort(); #pragma warning restore SYSLIB0006 }
Upozornění v souboru projektu můžete také potlačit.
<PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net5.0</TargetFramework> <!-- Disable "Thread.Abort is obsolete" warnings for entire project. --> <NoWarn>$(NoWarn);SYSLIB0006</NoWarn> </PropertyGroup>