Destination Array not long enough?

流过昼夜 提交于 2019-11-30 04:39:48

I would say the error lies in the object _bikes not being thread safe. As commented, somewhere there is a modify of the _bikes object that is not being lock'ed.

It is a split second error where the variable bs is set up to a size X when the size of _bikes is measured. In the next split second as it is about to fill the list, the _bikes object has increased in size giving the error.

So go over your code. Find all references of your _bikes object and make sure they are thread safe handled (with lock).

edvaldig

Well you could try:

using System.Linq; //ToList() is an extension function defined here
...
lock(_bikes)
    return _bikes.ToList();

The details of the exception are discussed here: Why doesn't a foreach loop work in certain cases?

Not really an answer, more a research comment.

I ran into the same problem and did a quick test. I tried with the code below and could not get this code to throw the ArgumentException: Destination array was not long enough. But when I remove the .ToList() from the line

return allLines.ToList().ToArray();

it immediately crashes.

This is the demo code and even the IDE tells me, I should remove the ToList() call as it seems redundant.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;

namespace ConsoleApp1
{
    class Program
    {
        static void Main() {

            List<string> thelist = new List<string>();

            Thread producer = new Thread(() => {
                while (true) {
                    thelist.Add("a" + DateTime.Now);
                }
            });

            Thread transformer = new Thread(() => {
                while (true) {
                    string[] thearray = thelist.ToList().ToArray();
                    Console.WriteLine(thearray.Length);
                }
            });
            producer.Start();
            transformer.Start();
            Console.ReadKey(true);
        }
    }
}

I really wonder, why it would not crash, as the List is also backed by an array.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!