contract@chaoreumsoft.co.kr |    031-921-0523

[NET5] Thread.Abort 에러

페이지 정보

작성자최고관리자

본문

NET5에서 부터는 Thread.Abort(상태파악 불가 , 즉시 종료 보장 없음) 사용 불가따라서 


CancellationToken를 이용하여 사용 하길 권장.



대체 방법 

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

    }

}



변경 내용 


메서드가 호출되는 경우 .NET 5 이상 버전을 대상으로 하는 프로젝트에서는 컴파일 시간 경고 SYSLIB0006이 발생 합니다.


이전에는 Thread.Abort 호출이 컴파일 시간 경고가 생성되지 않았지만, 런타임에 PlatformNotSupportedException을 throw 합니다.


.NET 5부터 Thread.Abort는 경고로 사용되지 않는 것으로 표시됩니다. 


해당 메서드를 호출하면 컴파일러 경고 SYSLIB0006이 생성 됩니다. 


메서드의 구현은 변경되지 않으며 계속해서 PlatformNotSupportedException을 throw합니다.



변경 이유 


Thread.Abort가 .NET Framework를 제외한 모든 .NET 구현 에서 항상 PlatformNotSupportedException을 throw하는 것을 고려하여 메서드가 호


출된 위치로 주의를 끌기 위해 ObsoleteAttribute가 메서드에 추가되었습니다.


현재 스레드가 아닌 다른 스레드를 중단하도록 호출 Thread.Abort 할 때 어떤 코드가 실행 되었거나 throw될 때 ThreadAbortException 실행 하


또한 애플리케이션의 상태 또는 유지를 담당하는 애플리케이션 및 사용자 상태를 확인 할 수 없습니다.


예를 들어 호출 Thread.Abort 은 정적 생성자의 실행 또는 관리 되거나 관리되지 않는 리소스의 릴리스를 방지 할 수 있습니다. 


이러한 이유로 Thread.Abort 항상 .NET Core 및 .NET 5 이상에서 PlatformNotSupportedException 예외 처리 합니다.


Tag
NET5 , Thread.Abort , System.Threading.Thread.Abort , SYSLIB0006 , PlatformNotSupportedException
© Chaoreumsoft Corp. All rights reserved.