你能解释一下这个System.Collections.Generic.KeyNotFoundException吗?

时间:2011-04-06 14:54:29

标签: c# multithreading dictionary

我有以下代码:

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

其中mCommandMapDictionary<string, ManualResetEvent>,而pId是始终从GUID.NewGuid().ToString()

创建的字符串

现在我在调用者的行中引发了KeyNotFoundException。调试器告诉我字典中有一个项,并且它有一个完全相同的键,我要求的那个。去图。

偶尔会发生这种情况。并非总是如此。

问题是,WTF?

1 个答案:

答案 0 :(得分:3)

我猜你在多个线程中操纵command,其pId最终会发生变化。

或者,您可以在多个线程中操作mCommandMap而无需锁定。

尝试在代码中添加lock()