我有以下代码:
mCommandMap[command.pId] = new System.Threading.ManualResetEvent(false);
SendCommandASync(command);
mCommandMap[command.pId].WaitOne();
其中mCommandMap
是Dictionary<string, ManualResetEvent>
,而pId
是始终从GUID.NewGuid().ToString()
现在我在调用者的行中引发了KeyNotFoundException。调试器告诉我字典中有一个项,并且它有一个完全相同的键,我要求的那个。去图。
偶尔会发生这种情况。并非总是如此。
问题是,WTF?
答案 0 :(得分:3)
我猜你在多个线程中操纵command
,其pId
最终会发生变化。
或者,您可以在多个线程中操作mCommandMap
而无需锁定。
尝试在代码中添加lock()
。