我正在编写一个运行numberOfItems
线程的.NET Core单元测试,等待它们完成然后检查结果。当我运行测试时,在第16行出现索引超出范围的错误(请参阅代码中的注释)。我不明白为什么会这样,对我来说这毫无意义。
[Test]
public void MyTest()
{
int numberOfItems = 10;
// array of strings of length 'numberOfItems'
string[] names = Enumerable.Repeat("", numberOfItems).ToArray();
// array of threads of length 'numberOfItems'
Thread[] threads = Enumerable.Repeat<Thread>(null, numberOfItems).ToArray();
for (int i = 0; i < numberOfItems; i++)
{
threads[i] = new Thread(() =>
{
names[i] = _myService.GetNextItem();
}); // INDEX OUT OF RANGE HERE
}
// start all threads
for (int i = 0; i < numberOfItems; i++)
{
threads[i].Start();
}
// wait until threads are finished
for (int i = 0; i < numberOfItems; i++)
{
threads[i].Join();
}
// returned names should not be equal
names.Distinct().Count().Should().Be(numberOfItems);
}