共用方式為


SYSLIB0006:不支援 Thread.Abort

從 .NET 5 開始,下列 API 會標示為已淘汰。 使用這些 API 會在編譯時期產生警告 SYSLIB0006,並且在執行階段產生警告 PlatformNotSupportedException

當您呼叫 Thread.Abort 以中止目前執行緒以外的執行緒時,您不知道當擲回 ThreadAbortException 時,什麼程式碼已執行或無法執行。 您也無法確定應用程式的狀態,或是任何負責保留的應用程式和使用者狀態。 例如,呼叫 Thread.Abort 可能會阻止執行靜態建構函式,或釋放受控或非受控資源。 因此,Thread.Abort 一律會在 .NET Core 和 .NET 5+ 上擲回 PlatformNotSupportedException

因應措施

使用 CancellationToken 來中止工作單位的處理,而不是呼叫 Thread.Abort。 下列範例示範如何使用 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);
    }
}

隱藏警告

若您必須使用已淘汰的 API,您可以在程式碼或專案檔中隱藏警告。

若要只隱藏單一違規,請將前置處理器指示詞新增至原始程式碼檔案,以停用並重新啟用警告。

// Disable the warning.
#pragma warning disable SYSLIB0006

// Code that uses obsolete API.
// ...

// Re-enable the warning.
#pragma warning restore SYSLIB0006

若要隱藏專案中的所有 SYSLIB0006 警告,請將 <NoWarn> 屬性新增至專案檔。

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
   ...
   <NoWarn>$(NoWarn);SYSLIB0006</NoWarn>
  </PropertyGroup>
</Project>

如需詳細資訊,請參閱隱藏警告

另請參閱