SYSLIB0006: Thread.Abort はサポート対象外
.NET 5 以降では、次の API は古い形式としてマークされています。 これらの API を使用すると、コンパイル時には警告 SYSLIB0006
が、実行時には PlatformNotSupportedException が生成されます。
現在のスレッド以外のスレッドを中止するために Thread.Abort を呼び出すと、ThreadAbortException がスローされたときにどのコードが実行されたか、または実行に失敗したかがわかりません。 また、お使いのアプリケーションの状態や、保持する責任がある任意のアプリケーションやユーザーの状態を特定することもできません。 たとえば、Thread.Abort を呼び出すと、静的コンストラクターの実行や、マネージドまたはアンマネージド リソースの解放が妨げられる場合があります。 このため、.NET Core と .NET 5 以降では、Thread.Abort によって PlatformNotSupportedException が常にスローされます。
回避策
Thread.Abort を呼び出す代わりに、CancellationToken を使用して作業単位の処理を中止します。 次の例は、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>
詳細については、「警告を表示しない」を参照してください。
関連項目
.NET