모범 사례 : 올바른 취급 취소 tokensource
] cancellationTokenSource
클래스를 해제 할 수 있지만 올바른 릴리스 방법은 종종 개발자를 혼란스럽게합니다. 이 기사는 그러한 종을 효과적으로 방출하는시기와 방법을 자세히 살펴 봅니다.
이 불분명성의 이유 중 하나는 cancellationTokenSource
클래스에 최종화기가 없기 때문입니다. 이것은 쓰레기 수집기 (GC)가 자동으로 해제 할 수 없음을 의미합니다. 따라서 토큰 소스를 명시 적으로 해제하는 것은 개발자의 책임이됩니다.
그럼에도 불구하고 MSDN에 제공된 예제는 릴리스를 거의 언급하지 않습니다. 그렇다면 권장 방법은 무엇입니까?
릴리스 전략
작업이 완료되기를 기다릴 때 '사용'명령문 사용 : 병렬 작업이 완료되기를 기다리는 경우 '사용'문을 사용하여 코드를 랩핑 할 수 있습니다. 이렇게하면 작업이 완료된 후 토큰 소스가 자동으로 해제됩니다.
using (CancellationTokenSource tokenSource = new CancellationTokenSource())
{
Task.Run(() => { }, tokenSource.Token);
}
ContinueWith 및 Manual Release 사용 : 또는 작업에 연속적인 이벤트 핸들러를 등록하고 핸들러에서 토큰 소스를 수동으로 해제 할 수 있습니다 :
Task.Run(async () =>
{
try
{
// 任务代码
}
finally
{
tokenSource.Dispose();
}
}, tokenSource.Token);
cancellable plinq query : synchronized unscheduled plinq 쿼리의 경우, 권장되는 방법은 dispose
이벤트 핸들러에서 cancellationtokensource
모든 작동을 실행하는 것입니다.
재사용 성 및 다중 사용 : CancellationTokenSource
인스턴스는 재사용 할 수 없습니다. 각 취소 작업마다 생성 및 릴리스해야합니다.
직접 릴리스 : '사용'명령문 또는 ContinueWith 이벤트 핸들러를 사용할 수 없다면, 완료된 후 바로 토큰 소스를 해제 할 수 있습니다.
CancellationTokenSource tokenSource = new CancellationTokenSource();
Task.Run(() => { }, tokenSource.Token);
// ...
tokenSource.Dispose();
요약
릴리스 CancellationTokenSource
인스턴스는 메모리 누출을 방지하고 적절한 자원 관리를 보장하는 데 필수적입니다. 권장 릴리스 전략에 따라 개발자는 코드에서 취소 작업을 효과적으로 처리 할 수 있습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3