ホームページ > バックエンド開発 > C++ > 「待ち望まれているwinrtタスクを適切にキャンセルする方法は?

「待ち望まれているwinrtタスクを適切にキャンセルする方法は?

DDD
リリース: 2025-01-26 12:56:10
オリジナル
383 人が閲覧しました

How to Properly Cancel an `await`-ing WinRT Task?

タスクを効果的にキャンセルします

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>
ログイン後にコピー

以上が「待ち望まれているwinrtタスクを適切にキャンセルする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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