【发布时间】:2016-10-17 02:02:18
【问题描述】:
我有一个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> 然后以某种方式重构我的数据库调用仍然是异步的......但是......更好吗?
【问题讨论】:
-
在字典中存储任务有什么问题?
-
投票反对或反对的人,请解释原因,以改善 Q。
-
@StephenCleary 我不确定这是好事还是坏事。当结果只是一个
int时,感觉就像一个要存储的重对象。
标签: c# async-await concurrentdictionary