Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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ěnit popis
Dříve volání na Thread.Abort nevytvářela během kompilace žádná upozornění, ale metoda při běhu vyvolala PlatformNotSupportedException.
Počínaje verzí .NET 5 je Thread.Abort označený jako zastaralý s upozorněním. Volání této metody vytvoří upozornění SYSLIB0006kompilá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 ve všech implementacích .NET s výjimkou .NET Framework, byla do metody přidána ObsoleteAttribute, aby upoutala pozornost na místa, kde je volána.
Když zavoláte Thread.Abort ke zrušení vlákna jiného než aktuálního vlákna, nevíte, který kód byl spuštěn nebo se nezdařil provést, když došlo k vyvolání ThreadAbortException. Také nemůžete mít jistotu o stavu vaší aplikace nebo jakékoliv jiné aplikace a stavu uživatele, za který je odpovědná 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ší.
Verze byla představena
5,0
Doporučená akce
Použijte CancellationToken k přerušení zpracování pracovní jednotky 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čte kód upozornění
SYSLIB0006. Kód upozornění je specifický pro Thread.Abort a jeho potlačení nepotlačí další upozornění na zastaralost ve vašem kódu. Nicméně místo potlačování upozornění 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>