【发布时间】:2011-07-01 10:04:00
【问题描述】:
我需要一些帮助来了解线程安全和字典。添加到字典时,我收到一条错误消息,提示“已添加具有相同键的项目”(当我说我得到它时,我实际上无法复制它,但在错误日志中看到它)。
从我在阅读类似问题时看到的情况来看,这可能与线程安全有关,但我仍然不清楚发生了什么。而且由于很难测试,尤其是当我无法复制它时,我希望有人能够解释或指出我正确的方向。这是一个 asp.net Web 应用程序 (C#),在为特定用户定制测验时发生错误。我在尝试访问不存在的密钥时也遇到了错误,但一次只有一件事!
我做了一个小例子,我去掉了所有我认为没有必要展示问题的东西。如果我剥离太多,请告诉我。
public class QuizDataAdapterFactory
{
private static IQuizDataAdapter q_adapter = new MyQuizDataAdapter();
public static IQuizDataAdapter Create()
{
return q_adapter;
}
}
IQuizDataAdapter dataAdapter = QuizDataAdapterFactory.Create();
public class MyQuizDataAdapter : IQuizDataAdapter
{
private Quiz quiz;
public Quiz GetQuiz()
{
quiz = new Quiz();
quiz.QuestionIndex = new Dictionary<Guid, QuestionBase>();
GetQuestions();
return quiz;
}
private void GetQuestions()
{
Item[] items;
foreach (Item questionItem in items)
{
Question newQuestion = new Question();
PopulateQuestionFromItem(newQuestion, questionItem);
questions.Add(newQuestion);
// this is where it fails
quiz.QuestionIndex.Add(questionItem.ID.ToGuid(), newQuestion);
}
}
}
为 IQuizDataAdapter 添加[ThreadStatic] 会起作用吗?
谢谢,
安妮莉
【问题讨论】:
-
这段代码是否被多个线程访问?
-
@Tony - 不,只是一个普通页面。
标签: c# .net dictionary thread-safety