Следующий фрагмент кода работает нормально при распараллеливании на 4-5 потоков, но начинает давать сбой, когда количество потоков увеличивается где-то за пределами 10 одновременных потоков
int totalRecieved = 0;
int recieved;
StringBuilder contentSB = new StringBuilder(4000);
while ((recieved = socket.Receive(buffer, SocketFlags.None)) > 0)
{
contentSB.Append(Encoding.ASCII.GetString(buffer, 0, recieved));
totalRecieved += recieved;
}
Метод Recieve
возвращается с нулевым прочитанным байтом, и если я продолжу вызывать метод recieve, то в итоге получаю исключение «Установленное соединение было прервано программным обеспечением на вашем хост-компьютере». Поэтому я предполагаю, что хост действительно отправил данные, а затем закрыл соединение, но по какой-то причине я так и не получил его.
Мне любопытно, почему эта проблема возникает при большом количестве потоков. Я думаю, что это как-то связано с тем, что каждый поток не получает столько времени выполнения, и поэтому у потоков есть некоторое время простоя, которое вызывает эту ошибку. Просто не могу понять, почему из-за простоя сокет не получает никаких данных.
Редактировать: просто чтобы уточнить. Каждый поток имеет собственный персональный сокет для чтения разных данных.