[解決済み] CancellationTokenSourceを破棄するタイミングは?
質問
クラス
CancellationTokenSource
は使い捨てです。Reflector で見てみると
KernelEvent
という、(おそらく)管理されていないリソースがあります。
ということは
CancellationTokenSource
はファイナライザを持たないので、もし廃棄しなければGCはそれを行いません。
一方、MSDNの記事に掲載されているサンプルを見てみると マネージド・スレッドにおけるキャンセル トークンを破棄するコードスニペットは1つだけです。
コードで廃棄する適切な方法は何ですか?
-
並列タスクを開始するコードを
using
を待っていなければなりません。そして、待たされない場合にのみキャンセルを行うことは理にかなっています。 -
もちろん
ContinueWith
を使ってタスクにDispose
を呼び出すのですが、その方法で良いのでしょうか? -
キャンセル可能なPLINQクエリについてはどうでしょうか。これは同期を戻さず、最後に何かを行うだけです。例えば
.ForAll(x => Console.Write(x))
? - 再利用可能ですか?同じトークンを複数の呼び出しに使用し、ホスト コンポーネント(たとえばUIコントロール)と共に破棄することができますか?
のようなものがないため
Reset
をクリーンアップするメソッド
IsCancelRequested
と
Token
フィールドは再利用できないので、タスク(またはPLINQクエリ)を開始するたびに新しいものを作成しなければならないと思います。本当でしょうか?もしそうなら、私の質問は、次のような対処をするための正しい、そして推奨される戦略とは何かということです。
Dispose
を使用した場合、その多くの
CancellationTokenSource
のインスタンスですか?
解決方法は?
でDisposeを呼び出すことが本当に必要なのか、という話。
CancellationTokenSource
... 私のプロジェクトでメモリリークが発生し、その結果
CancellationTokenSource
が問題でした。
私のプロジェクトには、常にデータベースを読み込み、さまざまなタスクを開始するサービスがあります。私はリンクされたキャンセルトークンをワーカーに渡していたので、ワーカーがデータ処理を終えた後でもキャンセルトークンが破棄されず、メモリリークの原因となりました。
MSDN マネージド・スレッドにおけるキャンセル が明確に述べています。
を呼び出す必要があることに注意してください。
Dispose
をリンクされたトークン・ソース上で使用することができます。より完全な例としては How to: 複数のキャンセル要求をリッスンする .
を使いました。
ContinueWith
を実装しました。
関連
-
[解決済み] エンティティタイプ ApplicationUser は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み】WebForms UnobtrusiveValidationModeは、jqueryのScriptResourceMappingを必要とする
-
[解決済み] 'SubSonic.Schema .DatabaseColumn' 型のオブジェクトをシリアライズする際に、循環参照が検出されました。
-
[解決済み】なぜこのコードはInvalidOperationExceptionを投げるのですか?
-
[解決済み】Swashbuckle/Swagger + ASP.Net Core: "Failed to load API definition" (API定義の読み込みに失敗しました
-
[解決済み】5.7.57 SMTP - MAIL FROMエラー時に匿名メールを送信するためにクライアントが認証されない
-
[解決済み】C#のequal to演算子でtextとvarcharのデータ型は互換性がない
-
[解決済み] EqualsメソッドがオーバーライドされたときにGetHashCodeをオーバーライドすることが重要な理由は何ですか?
-
[解決済み] async」と「await」の使い方とタイミング
-
[解決済み] Task.DelayとThread.Sleepの使い分けは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】パディングが無効で、削除できない?
-
解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C# [解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C#.
-
[解決済み] DBNullから他の型にオブジェクトをキャストすることができない
-
[解決済み] [Solved] 不正な文字列値: '\xEFxBFxBD' for column
-
[解決済み】EF 5 Enable-Migrations : アセンブリにコンテキストタイプが見つかりませんでした
-
[解決済み】5.7.57 SMTP - MAIL FROMエラー時に匿名メールを送信するためにクライアントが認証されない
-
[解決済み】ファイルへの読み書きの際に共有違反のIOExceptionが発生する C#
-
[解決済み】2年前のMSDateを把握する【クローズド
-
[解決済み] ...基礎となる接続は閉じられました。予期しないエラーが受信で発生しました
-
[解決済み】別のスレッドがこのオブジェクトを所有しているため、呼び出し側のスレッドはこのオブジェクトにアクセスできない