winrt
での非同期タスクのキャンセルを優雅に処理しますWindows 8 Winrtの非同期タスク管理は、タスクをキャンセルする際に課題を提示します。 一般的な問題はCancelNotification
メソッドの燃焼ですが、タスクは実行を継続し、タスクステータスが「キャンセル」の代わりに「完了」と誤ってマークされたままになります。
解決策:CancellationToken
を効果的に活用します
これを解決するための鍵は、
を渡し、それらの方法内でそのステータスを定期的にチェックすることが含まれます。
CancellationToken
CancellationToken
修正コードの例:
この改善されたコードスニペットは、:
の適切な使用を示しています
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 { // A canceled task will throw an exception when awaited. await task; } catch (OperationCanceledException) { // Handle cancellation gracefully. } } private int slowFunc(int a, int b, CancellationToken cancellationToken) { for (int i = 0; i < 1000000; i++) { cancellationToken.ThrowIfCancellationRequested(); // Check for cancellation // ... your long-running operation ... } return a + b; }</code>チェックが組み込まれています。 キャンセルが要求された場合、
がスローされ、タスクを効果的に停止し、そのステータスを「キャンセル」に正しく設定します。 この例外を処理するためのslowFunc
メソッドには、cancellationToken.ThrowIfCancellationRequested()
ブロックが含まれるようになりました。
OperationCanceledException
TryTask
結果:try-catch
このアプローチにより、キャンセル時にタスクが完全に停止することが保証され、正確なタスクステータスの報告を提供し、意図しないバックグラウンド実行を防止します。 適切な例外処理により、堅牢性がさらに強化されます。
以上がWindows 8 WinRT で非同期タスクを適切にキャンセルするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。