"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > CancellationTokenSource는 언제 그리고 어떻게 처리해야합니까?

CancellationTokenSource는 언제 그리고 어떻게 처리해야합니까?

2025-02-06에 게시되었습니다
검색:199

When and How Should I Dispose of a CancellationTokenSource?

모범 사례 : 올바른 취급 취소 tokensource

]

cancellationTokenSource 클래스를 해제 할 수 있지만 올바른 릴리스 방법은 종종 개발자를 혼란스럽게합니다. 이 기사는 그러한 종을 효과적으로 방출하는시기와 방법을 자세히 살펴 봅니다.

이 불분명성의 이유 중 하나는 cancellationTokenSource 클래스에 최종화기가 없기 때문입니다. 이것은 쓰레기 수집기 (GC)가 자동으로 해제 할 수 없음을 의미합니다. 따라서 토큰 소스를 명시 적으로 해제하는 것은 개발자의 책임이됩니다.

그럼에도 불구하고 MSDN에 제공된 예제는 릴리스를 거의 언급하지 않습니다. 그렇다면 권장 방법은 무엇입니까?

릴리스 전략

  1. 작업이 완료되기를 기다릴 때 '사용'명령문 사용 : 병렬 작업이 완료되기를 기다리는 경우 '사용'문을 사용하여 코드를 랩핑 할 수 있습니다. 이렇게하면 작업이 완료된 후 토큰 소스가 자동으로 해제됩니다.

     using (CancellationTokenSource tokenSource = new CancellationTokenSource())
     {
         Task.Run(() => { }, tokenSource.Token);
     }
  2. ContinueWith 및 Manual Release 사용 : 또는 작업에 연속적인 이벤트 핸들러를 등록하고 핸들러에서 토큰 소스를 수동으로 해제 할 수 있습니다 :

     Task.Run(async () =>
     {
         try
         {
             // 任务代码
         }
         finally
         {
             tokenSource.Dispose();
         }
     }, tokenSource.Token);
  3. cancellable plinq query : synchronized unscheduled plinq 쿼리의 경우, 권장되는 방법은 dispose 이벤트 핸들러에서 cancellationtokensource 모든 작동을 실행하는 것입니다.

  4. 재사용 성 및 다중 사용 : CancellationTokenSource 인스턴스는 재사용 할 수 없습니다. 각 취소 작업마다 생성 및 릴리스해야합니다.

  5. 직접 릴리스 : '사용'명령문 또는 ContinueWith 이벤트 핸들러를 사용할 수 없다면, 완료된 후 바로 토큰 소스를 해제 할 수 있습니다.

     CancellationTokenSource tokenSource = new CancellationTokenSource();
     Task.Run(() => { }, tokenSource.Token);
     // ...
     tokenSource.Dispose();

요약

릴리스 CancellationTokenSource 인스턴스는 메모리 누출을 방지하고 적절한 자원 관리를 보장하는 데 필수적입니다. 권장 릴리스 전략에 따라 개발자는 코드에서 취소 작업을 효과적으로 처리 할 수 ​​있습니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3