私のエンドポイントがIDを受け付け、結果を構成するために重い操作を実行する(PDFを生成する)APIを開発しています。リクエストの作業をキューに入れ、同じ作業を1回だけ実行する方法
短いリソースで同じリソースに対して同じリクエストを複数回取得する可能性があります。そのため、IDを追跡する作業キューが必要です。最初のリクエストは実際の作業を開始し、次の要求は(最初にパイプラインに入っているかどうかを最初に確認します)、作業が完了して同じ結果が返されるまで待ってください。
最初に私はConcurrentDictionary
が役に立つと思ったが、の作業が完了するまでの処理方法を知りませんでした。私もObservableCollection
を見ましたが、私はその安全性についてはわかりません(手動で安全にすることに多大な努力を払わずに)。
ああ基本的に私は辞書にタスクを保存していますが、IDがまだ存在しない場合は、そのタスクに 'ID'を追加します。同じIDの後続要求では、タスクを取り出して'彼ら? – romeozor
はい、それです。あなたは '.Wait()'や '.Result'をブロックすることもできますが、async/awaitが利用可能で、スレッド全体をブロックしたくないと思います。 – Matthias247