C#Dictionary Index超出了带锁定数组的范围

时间:2016-04-15 12:09:09

标签: c# multithreading dictionary locking

我有这段代码:

lock (dict)
{
    dict.Add(someKey, someValue);
    Task task = new Task (() => doSomething);
    task.Start();
    task.ContinueWith(() => {dict.Remove(someKey);});
}

由于我已经锁定了dict,为什么我仍然会收到错误

  

"索引超出了数组的范围"

我无法重现错误,但另一个人却做错了。

1 个答案:

答案 0 :(得分:1)

dict.Remove(someKey);不会在锁内部运行。它运行在不同的线程上。此代码未正确同步。

可能你需要的是lock (dick) dict.Remove(someKey);。然后,字典将正常运行。但是,AddRemove不是一个原子操作。