Я использую Linq для создания новых потоков в цикле и запуска их, а затем присоединяюсь к потокам в следующем цикле. Тем не менее, первый цикл выдает исключение, с которым я очень смущен, прежде чем я могу даже присоединиться к потокам. Я получаю индекс вне диапазона исключений, и я = 3, хотя indexOfHeaders имеет только 3 элемента (с индексами 0,1,2). Но что еще более странно, так это то, что я не могу увидеть значение int numberOfThreads, когда разбиваю исключение в отладчике, даже если все остальные локальные переменные видны. Это потому, что я неправильно использую linq или тернарный оператор? Ничто из этого не воспроизводится, когда я медленно выполняю код в отладчике.
private static void DecodeFileData(byte[] dataBuffer, UInt64 header, UInt64 trailer)
{
byte[] headerBytesReceive = BitConverter.GetBytes(header);
byte[] trailerBytesReceive = BitConverter.GetBytes(trailer);
IEnumerable<int> indexOfHeaders = StartingIndex(dataBuffer, headerBytesReceive); //int indexOfHeader = Array.IndexOf(HundredKBBuffer, headerBytesReceive);
// spawn up to 10 threads that look at the byte array for the right data
SerialTest.DataFileWriter fileWriter = new SerialTest.DataFileWriter();
int numberOfThreads = indexOfHeaders.Count() < 10 ? indexOfHeaders.Count() : 10;
List<Thread> threadList = new List<Thread>();
for (int i = 0; i < numberOfThreads; i++)
{
Thread decodeThread = new Thread(() => DecodeDataAsync(dataBuffer, headerBytesReceive, trailerBytesReceive, indexOfHeaders.ElementAt(i), fileWriter));
threadList.Add(decodeThread);
decodeThread.Start();
}
for (int i = 0; i < threadList.Count; i++)
threadList.ElementAt(i).Join();
}
public static void DecodeDataAsync(byte[] dataBuffer, byte[] headerBytesReceive, byte[] trailerBytesReceive, int indexOfHeader, SerialTest.DataFileWriter fileWriter)
{ //lots of file writing and stuff that is irrelevent
DecodeFileData вызывается синхронно из другого метода. DecodeDataAsync является асинхронным, как вы можете видеть из моего опубликованного кода.