ホームページ >バックエンド開発 >C++ >CancelTokenSource をいつ、どのように破棄すればよいですか?

CancelTokenSource をいつ、どのように破棄すればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-19 11:31:12793ブラウズ

When and How Should I Dispose of a CancellationTokenSource?

ベスト プラクティス: cancelTokenSource を正しく処理する

CancellationTokenSource クラスは解放できますが、クラスを解放する正しい方法は開発者を混乱させることがよくあります。この記事では、このクラスを効果的にリリースする時期と方法について詳しく説明します。

この明確さが欠けている理由の 1 つは、CancellationTokenSource クラスにファイナライザーがないことです。これは、ガベージ コレクター (GC) が自動的にそれを解放できないことを意味します。したがって、トークン ソースを明示的に解放するのは開発者の責任になります。

それにもかかわらず、MSDN で提供されている例ではリリースについてほとんど言及されていません。では、推奨されるアプローチは何でしょうか?

リリース戦略

  1. タスクの完了を待機する場合は 'using' ステートメントを使用します: 並列タスクの完了を待機している場合は、コードを 'using' ステートメントでラップできます。これにより、タスクの完了後にトークン ソースが自動的に解放されます:

    <code class="language-C#"> using (CancellationTokenSource tokenSource = new CancellationTokenSource())
     {
         Task.Run(() => { }, tokenSource.Token);
     }</code>
  2. ContinueWith と手動リリースを使用します: あるいは、タスクに ContinueWith イベント ハンドラーを登録し、ハンドラー内のトークン ソースを手動で解放することもできます:

    <code class="language-C#"> Task.Run(async () =>
     {
         try
         {
             // 任务代码
         }
         finally
         {
             tokenSource.Dispose();
         }
     }, tokenSource.Token);</code>
  3. キャンセル可能な PLINQ クエリ: 同期的に返されないキャンセル可能な PLINQ クエリの場合、すべての操作を CancellationTokenSource イベント ハンドラーで実行することをお勧めします。 Dispose

  4. 再利用性と複数の使用: インスタンスは再利用できません。これらは、キャンセル操作ごとに作成および解放される必要があります。 CancellationTokenSource

  5. 直接解放する: 「using」ステートメントまたは ContinueWith イベント ハンドラーを使用できない場合は、目的を達成した後でトークン ソースを直接解放できます:

    <code class="language-C#"> CancellationTokenSource tokenSource = new CancellationTokenSource();
     Task.Run(() => { }, tokenSource.Token);
     // ...
     tokenSource.Dispose();</code>

概要

インスタンスを解放することは、メモリ リークを防止し、適切なリソース管理を確保するために重要です。推奨されるリリース戦略に従うことで、開発者はコード内でキャンセル操作を効率的に処理できます。 CancellationTokenSource

以上がCancelTokenSource をいつ、どのように破棄すればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。