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