WinRT에서 신뢰할 수 없는 작업 취소 문제 해결
CancelNotification
을 사용하여 WinRT 작업을 중지하는 것은 신뢰할 수 없습니다. 메서드는 성공한 것처럼 보이지만 작업은 계속 실행됩니다. 이는 취소 시도에도 불구하고 작업 완료 상태로 이어지는 경우가 많습니다.
강력한 취소 접근 방식
해결책은 .NET 취소 및 작업 기반 비동기 패턴(TAP)을 이해하는 데 있습니다. TAP는 비동기 방식 내에서 CancellationToken
사용을 권장합니다. 중요한 단계는 취소 가능한 모든 메소드에 CancellationToken
를 전달하고 해당 메소드 내에 정기적인 확인을 포함시키는 것입니다.
개선된 코드 예:
이 수정된 코드는 await
:
<code class="language-csharp">private async Task TryTask() { var source = new CancellationTokenSource(); source.CancelAfter(TimeSpan.FromSeconds(1)); var task = Task.Run(() => slowFunc(1, 2, source.Token), source.Token); try { // Await the task; an exception is thrown if cancelled. await task; } catch (OperationCanceledException) { // Handle cancellation gracefully. Console.WriteLine("Task cancelled successfully."); } } private int slowFunc(int a, int b, CancellationToken cancellationToken) { string someString = string.Empty; for (int i = 0; i < 1000000; i++) { someString += i.ToString(); // Simulate long-running operation cancellationToken.ThrowIfCancellationRequested(); } return a + b; }</code>
이 코드는 CancellationToken
을 다음과 같이 활용합니다.
await task
작업이 취소되면 OperationCanceledException
이 발생합니다. 이 예외가 포착되어 처리됩니다.cancellationToken.ThrowIfCancellationRequested()
slowFunc
내부에서 정기적으로 취소 요청을 확인합니다.ThrowIfCancellationRequested
에서 예외를 발생시키고 취소 신호를 호출 스택에 전파합니다.이 접근 방식은 await
WinRT에서 완료된 작업을 안정적으로 취소하여 백그라운드 프로세스를 방지하고 보다 강력한 솔루션을 제공합니다.
위 내용은 WinRT에서 대기 가능한 작업을 안정적으로 취소하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!