在使用 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中文网其他相关文章!