private ConcurrentDictionary
は、いくつかのDBキーの単純なルックアップテーブルです。GetOrAddを呼び出すときに、非同期メソッドの結果を.NET ConcurrentDictionaryに格納する方法
私はConcurrentDictionary
を利用して、同じコード行への2回以上のリクエストが同時に行われたときにdbに対して1回の呼び出しを行うようにしています。 (これが私がConcurrentDictionary
を使用している理由です)
どうすればいいですか? ....
private readonly ConcurrentDictionary<string, Task<int>> _myKeys = new ConcurrentDictionary<string, Task<int>>();
...
private async Task<int> DoStuffAsync(string key)
{
// do stuff here.
return await _myKeys.GetOrAdd(key,
async k => await _db.GetId(k)
.ConfigureAwait(false))
.ConfigureAwait(false);
}
任意のアイデア
この
は..私は 行うにをしようとしていたものですが、私はそれは...ない 結果タスクの辞書にTask
を保存すると思います?
編集:
私のメソッドシグネチャと私が返すものに注目してください。 int
を返すほうがいいですか?Task<int>
ではなく、何とか私のdbコールがまだ非同期であるようにリファクタリングしています。
タスクを辞書に保存すると何が問題になりますか? –
クローズアップまたはダウン投票に投票している人は、Qを改善する理由を説明してください。 –
@StephenClearyこれが良いか悪いか分かりませんでした。結果がちょうどintであるとき、それは格納する_heavy_オブジェクトのように感じました。 –