質問

池尾:そういうふうに考えていアプローチの実施のためのタスクをキーとして運用している。-

オプション1)このキーは現在も審議中である。使用できるしっかり果たしていきたいと考えASP.NET MVCレシピを受け継ぎ、シングルの描画のためのサムネイル画像などの画像のUrlです。一つは、すべてのその他の要求を待機が完了します。

オプション2)すべての項目に同じ鍵を行う必要がある。使用できる例えば、確実に作業を取得するファイルからバッキングストア地域のキャッシュのないようにスタッフ全員が心がけていくのファイルのキャッシュでも同時に行います。オプション1は、特別の場合はこれがその後の行動は、同じキーで廃棄される通常の節約だけでファイルが存在するチェック).

私は、既存のWorkQueueを取り扱う両方のこれらのケース(アパート状態ThreadPriorityの設定および最大度の平行度).TPLれを置き換えることだける改善の取り消します。

入れ子のクcontinuationsう期待が維持辞書で現在キューにも作業のまちとの間でTaskFactoryのTaskSchedulerます。受け継がらの作業は難しすぎるものではないTaskFactoryもTaskScheduler、一般に作業です。

最タスク並行事例とのセット作で知られていきます。この場合は新規課題の追加をする必要があるから破棄または鎖で繋既存のタスクによって要求された操作を実行可能なの鍵を渡されます。

での実施も同様のことをTPL場合、どのようなアプローチしたまるで時が止まったかのようお仕事TaskSchedulerとTaskFactoryます。

役に立ちましたか?

解決

その一つの方法として私が考えられることはいは

  1. をラッパークラスにいKeyProcessorにキュームのためのキーとなります。
  2. KeyProcessor.Run()メソッドはできず待ち行列意味する必要があります。本質的にストとの同時購入で今なら内部キューに載中の作業を行っていくので。
  3. を維持する辞書のKeyProcessorオブジェクト。
  4. 新しいタスクは、チェック辞書に同じ鍵があります。が存在しないその後追加します。キューにタスクです。場合は、その実行中にその予定でTPL実行方法として行動する。
  5. 利用ContinueWith定の日時にメンテナの課題-例えば、いつのタスクを実行KeyProcessor.実行が完了し、継続課題を確認できる場合があり作業を予定している同じキー(年で修了)して、または削除から辞書で調べました。

すべての上記されてい難からのスレッド同期サイエンスの適用などと組み合わせた、より面白いレ在 システム。ョンにします。兼職の状況 namespace.これらのロジックもより簡単になります。例えば、 ConcurrentDictionary.GetOrAdd によるルックアップおよび/または追加のKeyProcessorオブジェクトをスレッドで安全です。

他のヒント

この問題は私も以前の要求をメモ化けれども、私は、 ReactiveXaml の中で解決したのと同様です。 QueuedAsyncMRUCache のコードを見てみましょう(とそのブログエントリで) - このコードが行わこの種のものを得るための反応性の拡張とTPLを兼ね備えたが、それは同じキーの第二の要求ではなく、最初の飛行中のリクエストに応じてブロックすることが重要保証し別のものを発行します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top