我有这段代码:
lock (dict)
{
dict.Add(someKey, someValue);
Task task = new Task (() => doSomething);
task.Start();
task.ContinueWith(() => {dict.Remove(someKey);});
}
由于我已经锁定了dict,为什么我仍然会收到错误
"索引超出了数组的范围"
我无法重现错误,但另一个人却做错了。
答案 0 :(得分:1)
dict.Remove(someKey);
不会在锁内部运行。它运行在不同的线程上。此代码未正确同步。
可能你需要的是lock (dick) dict.Remove(someKey);
。然后,字典将正常运行。但是,Add
和Remove
不是一个原子操作。