Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Interfejsy Thread.Abort API są przestarzałe. W przypadku wywołania tych metod projekty przeznaczone dla platformy .NET 5 lub nowszej wersji będą napotykać ostrzeżenie SYSLIB0006
dotyczące czasu kompilacji.
Zmień opis
Wcześniej wywołania do Thread.Abort nie generowały ostrzeżeń kompilacji, jednak metoda zgłaszała PlatformNotSupportedException w czasie wykonywania.
Począwszy od platformy .NET 5, Thread.Abort jest oznaczony jako ostrzeżenie o przestarzałości. Wywołanie tej metody powoduje wygenerowanie ostrzeżenia SYSLIB0006
kompilatora . Implementacja metody jest niezmieniona i nadal zgłasza błąd PlatformNotSupportedException.
Przyczyna zmiany
Biorąc pod uwagę, że Thread.Abort zawsze zgłasza PlatformNotSupportedException we wszystkich implementacjach platformy .NET z wyjątkiem programu .NET Framework, ObsoleteAttribute dodano do metody aby zwrócić uwagę na miejsca, w których jest wywoływana.
W przypadku wywołania Thread.Abort do przerwania wątku innego niż bieżący wątek, nie wiesz, jaki kod został wykonany lub nie wykonał się, gdy ThreadAbortException zostanie zgłoszony. Nie można również być pewnym stanu swojej aplikacji, ani stanu jakiejkolwiek aplikacji oraz stanu użytkownika aplikacji, za których zachowanie jest odpowiedzialna. Na przykład wywołanie Thread.Abort może uniemożliwić wykonywanie konstruktorów statycznych lub wydanie zarządzanych lub niezarządzanych zasobów. Z tego powodu Thread.Abort zawsze zgłasza wartość w programach PlatformNotSupportedException .NET Core i .NET 5+.
Wersja wprowadzona
5,0
Zalecana akcja
Użyj CancellationToken aby zakończyć przetwarzanie zadania zamiast wywoływać metodę Thread.Abort. W poniższym przykładzie pokazano użycie metody 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); } }
Aby uzyskać więcej informacji, zobacz Anulowanie w zarządzanych wątkach.
Aby pominąć ostrzeżenie dotyczące czasu kompilacji, pomiń kod
SYSLIB0006
ostrzegawczy . Kod ostrzegawczy jest specyficzny dla Thread.Abort i jego pominięcie nie powoduje pominięcia innych ostrzeżeń o przestarzałości w twoim kodzie. Zalecamy jednak usunięcie wywołań do Thread.Abort zamiast pomijania ostrzeżenia.void MyMethod() { #pragma warning disable SYSLIB0006 Thread.CurrentThread.Abort(); #pragma warning restore SYSLIB0006 }
Możesz również pominąć ostrzeżenie w pliku projektu.
<PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net5.0</TargetFramework> <!-- Disable "Thread.Abort is obsolete" warnings for entire project. --> <NoWarn>$(NoWarn);SYSLIB0006</NoWarn> </PropertyGroup>