我写了以下代码
public static class QuizSessionBL
{
#region Private Data
private static ConcurrentDictionary<int, QuizData> _data = new ConcurrentDictionary<int, QuizData>();
#endregion
#region Public Methods
public static void AddOrUpdate(QuizData pQuizData)
{
_data.AddOrUpdate(pQuizData.Quiz.QuizId, pQuizData,
(key, existingVal) =>
{
return existingVal;
});
}
public static bool Retrieve(int pQuizId, out QuizData pQuizData)
{
return _data.TryGetValue(pQuizId, out pQuizData);
}
public static void Remove(int pQuizId)
{
QuizData qd;
_data.TryRemove(pQuizId, out qd);
}
#endregion
}
我的目标是:
Ex如果30个3门课程的学生(每个课程10个)同时调用Retrieve()方法,则_data集合应该只有3个条目,每个课程一个。
所以基本上我想知道上面代码的效率,或者我应该为它添加更多内容。我希望在逻辑/概念而不是讨论方面给出答案。
答案 0 :(得分:0)
您的示例看起来很不错,因为字典中只有1个具有相同ID的项目。但是ConcurrentDictionary只会确保添加/删除是线程安全的。如果两个学生获得相同的QuizData对象并进行修改,除非每个QuizData对象内/周围都有线程安全,否则它们将相互覆盖。