首页 > 后端开发 > 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
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板