У меня есть private ConcurrentDictionary
, это простая таблица поиска некоторых ключей БД.
Я пытаюсь использовать ConcurrentDictionary
, чтобы он выполнял только один вызов БД, когда одновременно выполняются 2+ запроса на одну и ту же строку кода. (Вот почему я использую ConcurrentDictionary
.)
Как я могу это сделать, пожалуйста?
Это то, что я пытался сделать... но я думаю, что это сохранение Task
в словаре... а не результат задачи....
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);
}
Любые идеи?
РЕДАКТИРОВАТЬ:
Обратите внимание на сигнатуру моего метода и на то, что я возвращаю. Лучше ли вернуть int
, а не Task<int>
, а затем каким-то образом реорганизовать мой вызов БД, чтобы он все еще был асинхронным... но... лучше?
int
. - person Pure.Krome   schedule 18.10.2016