首頁 > 後端開發 > C++ > 如何可靠地取消Winrt中的等待任務?

如何可靠地取消Winrt中的等待任務?

Linda Hamilton
發布: 2025-01-26 12:51:09
原創
763 人瀏覽過

How Can I Reliably Cancel an Awaitable Task in WinRT?

解決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>

如果取消任務,則
  • 異常處理: thr await task。 捕獲和處理此例外。 OperationCanceledException>
  • >
  • >常規取消檢查:cancellationToken.ThrowIfCancellationRequested()內部slowFunc定期檢查取消請求。
  • >
  • 優雅的取消:如果檢測到取消,ThrowIfCancellationRequested引發了異常,將取消信號傳播到呼叫堆棧。
  • >

這種方法可確保在WinRT中可靠地取消>

以上是如何可靠地取消Winrt中的等待任務?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板