다음을 통해 공유


SYSLIB0006: Thread.Abort는 지원되지 않습니다.

다음 API는 .NET 5부터 사용되지 않는 것으로 표시됩니다. 이러한 API를 사용하면 컴파일 시간에 경고 SYSLIB0006이 생성되고 런타임에 PlatformNotSupportedException이 생성됩니다.

현재 스레드가 아닌 다른 스레드를 중단하기 위해 Thread.Abort를 호출하는 경우 ThreadAbortException이 throw될 때 실행되었거나 실행하지 못한 코드를 알 수 없습니다. 또한 애플리케이션의 상태 또는 유지를 담당하는 애플리케이션 및 사용자 상태를 확신할 수 없습니다. 예를 들어 Thread.Abort를 호출하면 정적 생성자가 실행되거나 관리되거나 관리되지 않는 리소스가 해제되지 않을 수 있습니다. 이러한 이유로 Thread.Abort는 항상 .NET Core 및 .NET 5 이상에서 PlatformNotSupportedException을 throw합니다.

해결 방법

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>

자세한 내용은 경고 표시 안 함을 참조하세요.

참고 항목