「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > いつ、どのようにCancellationTokenSourceを処分すればよいですか?

いつ、どのようにCancellationTokenSourceを処分すればよいですか?

2025-02-06に投稿しました
ブラウズ:759

When and How Should I Dispose of a CancellationTokenSource?

ベストプラクティス:CancellationTokenSource

]の正しい取り扱い

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

この不明瞭さの理由の1つは、 CancellationTokensource クラスにファイナルライザーがないことです。これは、Garbage Collector(GC)が自動的にリリースできないことを意味します。したがって、トークンソースを明示的にリリースすることが開発者の責任になります。

それにもかかわらず、MSDNで提供されている例はめったにリリースに言及しません。では、推奨される方法は何ですか?

リリース戦略

  1. タスクが完了するのを待つときに「使用」ステートメントを使用します。これにより、タスクが完了した後にトークンソースが自動的にリリースされることが保証されます。

    を使用して(cancellationtokensource tokensource = new cancellationtokensource()) { task.run(()=> {}、tokensource.token); }
     using (CancellationTokenSource tokenSource = new CancellationTokenSource())
     {
         Task.Run(() => { }, tokenSource.Token);
     }
  2. 継続的なリリースと手動リリースを使用します。

    task.run(async()=> { 試す { //タスクコード } ついに { tokensource.dispose(); } }、tokensource.token);

     Task.Run(async () =>
     {
         try
         {
             // 任务代码
         }
         finally
         {
             tokenSource.Dispose();
         }
     }, tokenSource.Token);
    Cancellable Plinq Query:
  3. シンデイロネイズされていない予定外のplinqクエリの場合、推奨される方法は、
  4. dispose

    イベントハンドラーを実行することです。 再利用性と複数の使用:

    cancellationtokensource
  5. インスタンスは再利用できません。キャンセル操作ごとに作成およびリリースする必要があります。
  6. 直接リリース:「使用」ステートメントまたは継続的なイベントハンドラーを使用できない場合、トークンソースが完了したら直接リリースできます:

  7. cancellationtokensource tokensource = new cancellationtokensource(); task.run(()=> {}、tokensource.token); // ... tokensource.dispose();

     CancellationTokenSource tokenSource = new CancellationTokenSource();
     Task.Run(() => { }, tokenSource.Token);
     // ...
     tokenSource.Dispose();
  8. リリース
CancellationTokenSource

インスタンスは、メモリリークを防ぎ、適切なリソース管理を確保するために不可欠です。推奨されるリリース戦略に従うことにより、開発者はコード内のキャンセル操作を効果的に処理できます。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3