Không thực sự là câu trả lời, thêm nhận xét về nghiên cứu.
Tôi đã gặp sự cố tương tự và đã thực hiện kiểm tra nhanh. Tôi đã thử với mã bên dưới và không thể lấy mã này để ném ArgumentException: Destination array was not long enough
. Nhưng khi tôi xóa số .ToList()
khỏi dòng
return allLines.ToList().ToArray();
nó ngay lập tức bị treo.
Đây là mã demo và thậm chí IDE cho tôi biết, tôi nên xóa cuộc gọi ToList()
vì có vẻ như dự phòng.
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);
}
}
}
Tôi thực sự tự hỏi, tại sao nó sẽ không sụp đổ, vì Danh sách cũng được hỗ trợ bởi một mảng.
Nguồn
2018-02-12 15:42:29
Trường hợp bạn nhận được ngoại lệ chính xác ở đâu? Bạn có thể cập nhật câu hỏi với dấu vết ngăn xếp ngoại lệ và chỉ ra dòng mã chính xác nơi nó được ném không? –
Có, đó là thông báo sau (xin lỗi vì sự lộn xộn): 'tại System.Array.Copy (mảng nguồnArray, Int32 sourceIndex, Array destinationArray, Int32 destinationIndex, Int32 length, Boolean đáng tin cậy) tại System.Array.Copy (Array sourceArray, Int32 sourceIndex, Array destinationArray, Int32 destinationIndex, Int32 length) tại System.Collections.Generic.List'1.CopyTo (mảng T [], Int32 arrayIndex) tại System.Collections.Generic.List'1. .ctor (Bộ sưu tập IEnumerable'1) tại MyGame.Player.get_bikesCopy() ' – Geert
Bạn đã từng có được nguyên nhân gốc rễ của vấn đề này chưa? Tôi đang chạy vào một cái gì đó tương tự. –