ホームページ > バックエンド開発 > C++ > WinRTでお待ちの課題を確実にキャンセルするにはどうすればよいですか?

WinRTでお待ちの課題を確実にキャンセルするにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-26 12:51:09
オリジナル
763 人が閲覧しました

How Can I Reliably Cancel an Awaitable Task in WinRT?

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 で

されたタスクを確実にキャンセルできるようになり、バックグラウンド プロセスが防止され、より堅牢なソリューションが提供されます。await

以上がWinRTでお待ちの課題を確実にキャンセルするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート