次の方法で共有


Thread.Abort は廃止予定です

Thread.Abort API は非推奨になっています。 .NET 5 以降のバージョンを対象とするプロジェクトでは、これらのメソッドが呼び出されると、コンパイル時の警告 SYSLIB0006 が発生します。

変更の説明

以前は、 Thread.Abort を呼び出してもコンパイル時の警告は生成されませんでしたが、メソッドは実行時に PlatformNotSupportedException をスローしていました。

.NET 5 以降では、 Thread.Abort は古いものとして警告としてマークされています。 このメソッドを呼び出すと、コンパイラ警告 SYSLIB0006が生成されます。 メソッドの実装は変更されず、引き続き PlatformNotSupportedException がスローされます。

変更の理由

Thread.Abort が .NET Framework 以外のすべての .NET 実装で常に PlatformNotSupportedException をスローすることを考慮すると、呼び出される場所に注意を引くためにメソッドに ObsoleteAttribute が追加されました。

Thread.Abortを呼び出して現在のスレッド以外のスレッドを中止すると、ThreadAbortExceptionがスローされたときに実行されたコードや実行に失敗したコードがわからない。 また、アプリケーションの状態や、アプリケーションが保持する責任を負うユーザーの状態についても確信を持てません。 たとえば、 Thread.Abort を呼び出すと、静的コンストラクターの実行や、マネージド リソースまたはアンマネージド リソースの解放が妨げになる場合があります。 このため、.NET Core と .NET 5 以降では、Thread.Abort によって PlatformNotSupportedException が常にスローされます。

導入されたバージョン

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);
        }
    }
    

    詳細については、「 マネージド スレッドでの取り消し」を参照してください。

  • コンパイル時の警告を抑制するには、警告コードの SYSLIB0006を抑制します。 警告コードは Thread.Abort に固有であり、抑制しても、コード内の他の難読化警告は抑制されません。 ただし、警告を抑制するのではなく、 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