首頁 >後端開發 >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)指南。 這涉及將a

傳遞給每個可取消方法,並定期檢查其在這些方法中的狀態。

CancellationToken CancellationToken修訂的代碼示例:

此改進的代碼段演示了>的正確使用:>

此修訂後的方法包含了ACancellationToken在其循環中檢查。 如果請求取消,則會拋棄一個

,有效地停止任務並將其狀態設置為“取消”。 現在,
<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>
方法包括一個

塊來處理此異常。 > slowFunccancellationToken.ThrowIfCancellationRequested()>結果:OperationCanceledExceptionTryTask> try-catch這種方法可確保取消任務完全停止,提供準確的任務狀態報告並防止意外的背景執行。 適當的例外處理進一步增強了魯棒性。

以上是如何在Windows 8 Winrt中正確取消異步任務?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn