解決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
>
await task
。 捕獲和處理此例外。 OperationCanceledException
>
cancellationToken.ThrowIfCancellationRequested()
內部slowFunc
定期檢查取消請求。 ThrowIfCancellationRequested
引發了異常,將取消信號傳播到呼叫堆棧。 這種方法可確保在WinRT中可靠地取消
以上是如何可靠地取消Winrt中的等待任務?的詳細內容。更多資訊請關注PHP中文網其他相關文章!