ホームページ >バックエンド開発 >C++ >Windows 8 WinRT で非同期タスクを適切にキャンセルするにはどうすればよいですか?

Windows 8 WinRT で非同期タスクを適切にキャンセルするにはどうすればよいですか?

DDD
DDDオリジナル
2025-01-26 12:46:09455ブラウズ

How Can I Properly Cancel Asynchronous Tasks in Windows 8 WinRT?

winrt

での非同期タスクのキャンセルを優雅に処理します

Windows 8 Winrtの非同期タスク管理は、タスクをキャンセルする際に課題を提示します。 一般的な問題はCancelNotificationメソッドの燃焼ですが、タスクは実行を継続し、タスクステータスが「キャンセル」の代わりに「完了」と誤ってマークされたままになります。

解決策:CancellationTokenを効果的に活用します これを解決するための鍵は、

を正しく実装し、タスクベースの非同期パターン(TAP)ガイドラインを順守することにあります。 これには、すべてのキャンセル可能な方法に

を渡し、それらの方法内でそのステータスを定期的にチェックすることが含まれます。 CancellationTokenCancellationToken修正コードの例:

この改善されたコードスニペットは、

の適切な使用を示しています

CancellationTokenこの改訂された

メソッドには、そのループ内にa
<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);

    try
    {
        // A canceled task will throw an exception when awaited.
        await task;
    }
    catch (OperationCanceledException)
    {
        // Handle cancellation gracefully.
    }
}

private int slowFunc(int a, int b, CancellationToken cancellationToken)
{
    for (int i = 0; i < 1000000; i++)
    {
        cancellationToken.ThrowIfCancellationRequested(); // Check for cancellation
        // ... your long-running operation ...
    }
    return a + b;
}</code>
チェックが組み込まれています。 キャンセルが要求された場合、

がスローされ、タスクを効果的に停止し、そのステータスを「キャンセル」に正しく設定します。 この例外を処理するためのslowFuncメソッドには、cancellationToken.ThrowIfCancellationRequested()ブロックが含まれるようになりました。 OperationCanceledExceptionTryTask結果:try-catch

このアプローチにより、キャンセル時にタスクが完全に停止することが保証され、正確なタスクステータスの報告を提供し、意図しないバックグラウンド実行を防止します。 適切な例外処理により、堅牢性がさらに強化されます。

以上がWindows 8 WinRT で非同期タスクを適切にキャンセルするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。