多线程单元测试中的索引超出范围

时间:2019-06-10 06:02:47

标签: c#

我正在编写一个运行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);
}

0 个答案:

没有答案