Можете ли вы объяснить это System.Collections.Generic.KeyNotFoundException? - PullRequest
1 голос
/ 06 апреля 2011

У меня следующий код:

mCommandMap[command.pId] = new System.Threading.ManualResetEvent(false);
SendCommandASync(command);
mCommandMap[command.pId].WaitOne();

Где mCommandMap - это Dictionary<string, ManualResetEvent>, а pId - строка, которая всегда создается из GUID.NewGuid().ToString()

Теперь ям в отладчике на линии, которая вызвала KeyNotFoundException.Отладчик говорит мне, что в словаре есть один элемент , и у него есть ключ, который точно такой же , который я запрашиваю.Go Figure.

Также это происходит спорадически.Не всегда.

Вопрос в том, WTF?

1 Ответ

3 голосов
/ 06 апреля 2011

Полагаю, вы манипулируете command в нескольких потоках, и pId со временем меняется.

Или вы манипулируете mCommandMap в нескольких потоках без блокировки.

Попробуйте добавить lock() вокруг кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...