Мне нужна помощь, чтобы разобраться с безопасностью потоков и словарями. При добавлении в словарь я получаю сообщение об ошибке: «Элемент с тем же ключом уже добавлен» (когда я говорю, что получаю его, я фактически не смог повторить это, но увидел его в журналах ошибок).
Из того, что я вижу при чтении подобных вопросов, скорее всего, это связано с безопасностью потоков, но я до сих пор не понимаю, что происходит. И так как это сложно проверить, особенно когда я не могу воспроизвести это, я надеюсь, что кто-то сможет объяснить или указать мне правильное направление. Это веб-приложение asp.net (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);
}
}
}
Сможет ли добавить [ThreadStatic]
для IQuizDataAdapter?
Спасибо
Annelie