Thread.Abort 已過時

Thread.AbortApi 已淘汰。 如果呼叫這些方法,以 .NET 5 或更新版本為目標的專案將會遇到編譯時間警告 SYSLIB0006

變更描述

之前,的呼叫 Thread.Abort 不會產生編譯時期警告,不過,方法會 PlatformNotSupportedException 在執行時間擲回。

從 .NET 5 開始, Thread.Abort 會標示為「已淘汰」為「警告」。 呼叫這個方法會產生編譯器警告 SYSLIB0006 。 方法的執行方式不變,且會繼續擲回 PlatformNotSupportedException

變更的原因

假設 Thread.Abort PlatformNotSupportedException 在所有 .net 執行上一律會擲回,但 .NET Framework 除外,就 ObsoleteAttribute 會將它新增至方法,以吸引人注意它的呼叫位置。

引進的版本

5.0

  • 使用 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);
        }
    }
    

    如需詳細資訊,請參閱 managed 執行緒中的取消

  • 若要隱藏編譯時期警告,請隱藏警告程式碼 SYSLIB0006 。 警告碼是特定的 Thread.Abort ,隱藏它不會隱藏程式碼中的其他 obsoletion 警告。 不過,我們建議您移除的呼叫, Thread.Abort 而不是隱藏警告。

    void MyMethod()
    {
    #pragma warning disable SYSLIB0006
        Thread.CurrentThread.Abort();
    #pragma warning restore SYSLIB0006
    }
    

    您也可以隱藏專案檔中的警告。

    <PropertyGroup>
      <OutputType>Exe</OutputType>
      <TargetFramework>net5.0</TargetFramework>
      <!-- Disable "Thread.Abort is obsolete" warnings for entire project. -->
      <NoWarn>$(NoWarn);SYSLIB0006</NoWarn>
    </PropertyGroup>
    

受影響的 API