• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Проблема Один цикл в нескольких потоках

Asdshka

New member
12.11.2022
1
0
BIT
0
Всем здравствуйте. Очень нуждаюсь в вашей помощи. Если реально поможете, то могу закинуть на пивас, сиги, дошик или мороженное для вашей дамы (в USDT только). Суть в том, что у меня есть файл, оттуда я построчно вытаскиваю строчки (извиняюсь за тавтологию), формирую запрос, отправляю его, получаю ответ и на основе ответа либо записываю эту строчку в новый файл, либо ничего не делаю. Большая проблема в том, что пока запрос уйдёт, пока ответ придёт - на это уходит около секунды (0.86+-). Надо как-то так сделать, чтобы одновременно по 100 строк бралось, отправлялись запросы разом, приходили ответы плюс-минус разом (как придут) ну и так далее. Изначально мой недокод был такой:
C#:
string s;
string response;
StreamReader f = new StreamReader(@"C:\Users\Admin\Desktop\1.txt");
 
while ((s = f.ReadLine()) != null)
{
    Uri url = new Uri($"...");//здесь во время формирования строки запроса используется 's'
    response = new WebClient().DownloadString(url);
 
    if (response.Contains("..."))
    {
        StreamWriter file = new StreamWriter(@"C:\Users\Admin\Desktop\01.txt", true);
        file.WriteLine(s);
        file.Close();
    }
    else
    {
 
    }
}
f.Close();
Console.ReadKey();

Потом мне немного помогли, а если быть точней, то предоставили такой код:
C#:
static void Main(string[] args)
{
    string s;
    var batch = new List<string>();
    StreamReader f = new StreamReader(@"C:\Users\Admin\Desktop\1.txt");
    
    while ((s = f.ReadLine()) != null)
    {
        batch.Add(s);

        if (batch.Count == 100)
        {
            Parallel.ForEach(batch, (s) =>
            {
                Uri url = new Uri($"...");//здесь в во время формирования строки запроса используется 's'
                var response = new WebClient().DownloadString(url);

                if (response.Contains("..."))
                {
                    StreamWriter file = new StreamWriter(@"C:\Users\Admin\Desktop\01.txt", true);
                    file.WriteLine(s);
                    file.Close();
                }
                else
                {
                }
            });
            batch.Clear();
        }
    }

    if (batch.Any())
    {

    }
    f.Close();
    
    Console.ReadKey();
}
Когда batch.Count == 100 - вылетают исключения:
-"System.IO.IOException: "The process cannot access the file"
-"System.Net.WebException: "Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера."
-"System.AggregateException: "One or more errors occurred"

Методом научного непонятно на чём обоснованного понижения добрался до batch.Count == 5, исключений нет, но и время изменилось совсем каплю (0.76+-).
В общем и целом, ищу тех самых супер мега гуру, которые сделают за меня то, что мне нужно. Зато честно и откровенно. С меня + в репу, пожизненный респект и если надо, то вначале написал, что могу на мороженное закинуть. Заранее обнял.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!