我正在编写一个需要通过多个计时器高速处理列表的 C# 库。我遇到了非常不稳定的错误,我尝试删除我确定包含在 List 中的元素,但程序返回以下错误:
System.IndexOutOfRangeException : 'index was outside the bounds of the array.'
我做了一个简单的例子来重现这种行为。由于该问题的随机性,我已经大力推动 List 操作,因此它会立即抛出错误。所以这个例子是必要的“怪异”。我在这里做了一个公开回购:问题示例回购
基本上,这就是我要处理的:
list = new List<DummyElement>();
for (int i = 0; i < 1000; i++)
{
Timer addTimer = new Timer(0.01f);
addTimer.Start();
addTimer.Elapsed += AddItem;
Timer removeTimer = new Timer(0.01f);
removeTimer.Start();
removeTimer.Elapsed += RemoveItem;
}
void AddItem(object source, ElapsedEventArgs e)
{
list.Add(new DummyElement());
}
void RemoveItem(object source, ElapsedEventArgs e)
{
int listCount = list.Count;
if (listCount > 0) // This condition is successfully passed, so there is at least one element on the list
{
list.RemoveAt(0); // This line throw an IndexOutOfRangeException error
}
}
我相信这是一个与线程相关的问题,好像列表计数在条件成功通过后发生了变化。
我对线程一无所知,我该如何处理这个问题?