모범 사례: CancellationTokenSource를 올바르게 처리
CancellationTokenSource
클래스를 릴리스할 수 있지만 올바른 릴리스 방법이 개발자를 혼란스럽게 만드는 경우가 많습니다. 이 문서에서는 이 클래스를 효과적으로 릴리스하는 시기와 방법에 대해 자세히 설명합니다.
명확성이 부족한 이유 중 하나는 CancellationTokenSource
클래스에 종료자가 없기 때문입니다. 이는 GC(가비지 수집기)가 자동으로 이를 해제할 수 없음을 의미합니다. 따라서 토큰 소스를 명시적으로 해제하는 것은 개발자의 책임입니다.
이에도 불구하고 MSDN에 제공된 예제에는 릴리스에 대한 언급이 거의 없습니다. 그렇다면 권장되는 접근 방식은 무엇입니까?
출시 전략
작업 완료를 기다릴 때 'using' 문 사용: 병렬 작업이 완료되기를 기다리는 경우 'using' 문으로 코드를 래핑할 수 있습니다. 이렇게 하면 작업이 완료된 후 토큰 소스가 자동으로 해제됩니다.
<code class="language-C#"> using (CancellationTokenSource tokenSource = new CancellationTokenSource()) { Task.Run(() => { }, tokenSource.Token); }</code>
ContinueWith 및 수동 릴리스 사용: 또는 작업에 ContinueWith 이벤트 핸들러를 등록하고 핸들러에서 토큰 소스를 수동으로 릴리스할 수 있습니다.
<code class="language-C#"> Task.Run(async () => { try { // 任务代码 } finally { tokenSource.Dispose(); } }, tokenSource.Token);</code>
취소 가능한 PLINQ 쿼리: 동기적으로 반환되지 않는 취소 가능한 PLINQ 쿼리의 경우 권장되는 접근 방식은 CancellationTokenSource
이벤트 핸들러에서 모든 작업을 수행하는 것입니다. Dispose
재사용성 및 다양한 용도: 인스턴스는 재사용할 수 없습니다. 모든 취소 작업에 대해 생성 및 해제되어야 합니다. CancellationTokenSource
직접 해제: 'using' 문이나 ContinueWith 이벤트 핸들러를 사용할 수 없는 경우 목적을 달성한 후 토큰 소스를 직접 해제할 수 있습니다.
<code class="language-C#"> CancellationTokenSource tokenSource = new CancellationTokenSource(); Task.Run(() => { }, tokenSource.Token); // ... tokenSource.Dispose();</code>
요약
인스턴스를 해제하는 것은 메모리 누수를 방지하고 적절한 리소스 관리를 보장하는 데 중요합니다. 권장되는 릴리스 전략을 준수함으로써 개발자는 코드에서 취소 작업을 효율적으로 처리할 수 있습니다. CancellationTokenSource
위 내용은 CancellationTokenSource를 언제 어떻게 처리해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!