Как рассчитать цикл для параллельного пинга? - PullRequest
0 голосов
/ 20 мая 2018

У меня есть список IP с неизвестным количеством элементов (может быть 1578, 500, 1253 ....).
Я хочу создать цикл, который будет каждый раз брать только 10 элементов и проверять ping к ним (так что сервер не застрянет).

После пинга и если IP-адрес подключен, я запустю на нем больше функций.

Итак, что мне делатьв для условия?

//a list of IP that will be online 
List<string> Online = new List<string> ();
//temp list to get 10 IP everytime
List<string> Top10 = new List<string>();
//this a list from sql 
List<string> ListIPs = new List<string>();

//want to run the command for only 3 in each time
for (int i = 0; i < ListIPs.Count - 8; i++)
{
    Top3 = ListIPs.GetRange(i, 9);
    System.Threading.Tasks.Parallel.ForEach(Top10, site =>
    {
        Ping p = new Ping();
        string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
        byte[] buffer = Encoding.ASCII.GetBytes(data);
        int timeout = 200;

        PingReply reply = p.Send(site, timeout, buffer);
        if (reply.Status == IPStatus.Success)
        {
            Online.Add(site + "," + reply.Status.ToString() + " , " + reply.RoundtripTime.ToString());
        }
    });///end of Threading

    //    Console.WriteLine("Finish time " + i);
    i = i + 9;
    //     foreach (var v in Top10)
    //      {
    //         Console.WriteLine(v);
    //      }
    Top10.Clear();
} //end of cutting the list to 10 each time

Это работает для списка с 1548 - я удаляю последние 8, чтобы увидеть, что он работает, но как мне сделать это автоматически?
И не зная количества элементов?

Может быть что-то вроде:
list.count/10 и затем взять десятичную часть?

Например:

32/10
часть int равна 3
, а десятичная часть будет 2

Затем изменить условие for?

или взять 2 и добавить 10 - 2 = 8 нулей?

...