> 백엔드 개발 > C++ > WinRT에서 비동기 작업을 올바르게 취소하는 방법은 무엇입니까?

WinRT에서 비동기 작업을 올바르게 취소하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2025-01-26 12:41:11
원래의
220명이 탐색했습니다.

How to Properly Cancel Asynchronous Tasks in WinRT?

WinRT 비동기 작업을 취소하는 올바른 방법

Windows 8 WinRT에서 작업은 비동기 작업을 수행하는 메커니즘을 제공합니다. 그러나 작업 취소를 처리하는 것은 까다로울 수 있습니다.

다음 코드를 고려하세요.

<code class="language-csharp">private async void TryTask()
{
    CancellationTokenSource source = new CancellationTokenSource();
    source.Token.Register(CancelNotification);
    source.CancelAfter(TimeSpan.FromSeconds(1));
    var task = Task<int>.Factory.StartNew(() => slowFunc(1, 2), source.Token);

    await task;

    if (task.IsCompleted)
    {
        MessageDialog md = new MessageDialog(task.Result.ToString());
        await md.ShowAsync();
    }
    else
    {
        MessageDialog md = new MessageDialog("Uncompleted");
        await md.ShowAsync();
    }
}

private int slowFunc(int a, int b)
{
    string someString = string.Empty;
    for (int i = 0; i < 1000000; i++)
    {
        someString += i.ToString();
    }
    return a + b;
}</code>
로그인 후 복사

CancelNotification 메소드가 호출되었음에도 불구하고 작업은 백그라운드에서 계속 실행되어 완료됩니다. 취소 시 작업을 완전히 중지하려면 다음 지침을 따르세요.

  • CancellationToken 전달: 취소를 지원하는 모든 메서드에 CancellationToken를 전달합니다.
  • CancellationToken을 주기적으로 확인하세요. 이 메서드는 주기적으로 확인CancellationToken해야 합니다.

개선된 코드는 다음과 같습니다.

<code class="language-csharp">private async Task TryTask()
{
    CancellationTokenSource source = new CancellationTokenSource();
    source.CancelAfter(TimeSpan.FromSeconds(1));
    Task<int> task = Task.Run(() => slowFunc(1, 2, source.Token), source.Token);

    // (取消的任务在等待时会引发异常)。
    await task;
}

private int slowFunc(int a, int b, CancellationToken cancellationToken)
{
    string someString = string.Empty;
    for (int i = 0; i < 1000000; i++)
    {
        cancellationToken.ThrowIfCancellationRequested(); // 检查取消请求
        someString += i.ToString();
    }
    return a + b;
}</code>
로그인 후 복사

이러한 수정을 통해 작업 실행 중에 작업이 취소되면 작업이 완전히 취소되고 대기 중에 예외가 발생합니다.

위 내용은 WinRT에서 비동기 작업을 올바르게 취소하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿