如何计算并行ping的循环?

时间:2018-05-20 10:06:20

标签: c# multithreading ping

我有一个包含未知数量项目的IP列表(可能是1578,500,1253 ....) 我想创建一个循环,每次只需10个项目并检查ping它们(因此服务器不会卡住)。

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零?

0 个答案:

没有答案