首頁 > 後端開發 > C++ > 如何正確取消「等待」WinRT 任務?

如何正確取消「等待」WinRT 任務?

DDD
發布: 2025-01-26 12:56:10
原創
383 人瀏覽過

How to Properly Cancel an `await`-ing WinRT Task?

在使用 await 的情況下有效取消任務

在處理 WinRT 任務時,您可能會嘗試使用 CancelNotification 方法終止任務。但是,此代碼可能會導致意外結果,因為即使嘗試取消,任務實際上也會繼續完成。為了克服此限制並在取消時真正停止任務,請按照以下步驟操作:

通過傳遞 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);

  try
  {
    await task;
  }
  catch (OperationCanceledException)
  {
    // 处理取消
  }
}

private int slowFunc(int a, int b, CancellationToken cancellationToken)
{
  string someString = string.Empty;
  for (int i = 0; i < 1000000; i++)
  {
    someString += i.ToString();
    cancellationToken.ThrowIfCancellationRequested(); // 定期检查取消请求
  }
  return a + b;
}</code>
登入後複製

通過在 await 操作中使用 try/catch 塊,您可以處理 OperationCanceledException 並採取適當的措施來減輕任務取消的影響。

以上是如何正確取消「等待」WinRT 任務?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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