Учитывая список IP-адресов:
List<string> ipList = new List<string>(); //example: 192.168.0.1, 192.168.0.2, 192.168.0.3 etc.
Я пытаюсь параллельно перебрать каждый IP-адрес в списке, а затем вывести значимое сообщение на экран:
foreach (PingReply pingReply in ipList.AsParallel().WithDegreeOfParallelism(64).Select(ip => new Ping().Send(ip)))
{
Console.WriteLine($"Ping status: {pingReply.Status} for the target IP address: {ip}");
}
Я не могу получить доступ к ip
в этом контексте. Я действительно хотел бы понять, как я могу получить доступ к каждому родственнику ip
, когда я их отправляю?
Я изучил PingReply
объект, но PingReply.Address
в качестве примера содержит IP-адрес хоста (отправителя), поэтому он не может помочь с этим требованием. Я бы очень хотел, чтобы объект PingReply
содержал пропингованный IP-адрес!
ОБНОВЛЕНИЕ
В соответствии с примером, предоставленным @haim770 и @MindSwipe, я в итоге использовал:
foreach (var pingResponseData in ipList.AsParallel().WithDegreeOfParallelism(64).Select(ip => new { ip, pingReply = new Ping().Send(ip) }))
{
Console.WriteLine($"Ping status: {pingResponseData.pingReply.Status} for the target IP address: {pingResponseData.ip}");
}
ОБНОВЛЕНИЕ 2
В соответствии с комментарием от @pinkfloydx33 относительно использования ValueTuple
я сделал в следующем примере:
foreach (var (ip, reply) in ipList.AsParallel().WithDegreeOfParallelism(ipList.Count).Select(ip => (ip, new Ping().Send(ip, 150))))
{
Console.WriteLine($"Ping status: {reply.Status} for the target IP address: {ip}");
}
.Select(ip => new { ip, pingResult = new Ping().Send(ip) })
- person haim770   schedule 16.02.2021Parallel.ForEach(ipList, ip => { /*code to do ping and write result*/ });
. читать будет легче. - person Llama   schedule 16.02.2021