当我使用 PingAsync 同时 ping 到多个 IP 时,如何获得 ping 结果(如往返时间和 ping 状态)?



我有以下代码-1用于ping到单个IP并获得ping结果。它正在按预期工作。现在我想同时ping多个IP(只有几个,而不是几百个IP(,并得到它们的结果。

我已经编写了Code-2,但我不知道如何获得每个ping进程的往返时间和ping状态等结果。在Code1中,我从var回复中得到了这些。但在Code2中,我不知道如何获取它们?

代码1*****

private async ValueTask PingMachine(string ipadress, string iptype)
{
var timesToPing = 4;
var counter = 1;
while (counter <= timesToPing)
{
var reply = await Pinger(ipadress);
TagService.log_Win.AppendLine($"Pinged {ipadress} {counter} times time:{reply.RoundtripTime} status: {reply.Status.ToString()}");
}
counter++;
}
}
private async ValueTask<PingReply>
Pinger(string ipAddress)
{
var ping = new Ping();
var reply = await ping.SendPingAsync(ipAddress);
return reply;
}

代码2*****

public static string[] addresses = { "10.92.114.73", "10.92.114.74", "10.92.114.75" };
private async Task<List<PingReply>> Pinger2()
{
var tasks = addresses.Select(ip => new Ping().SendPingAsync(ip, 2000));
var reply = await Task.WhenAll(tasks);
return reply.ToList();
}

更新2******

var replies = await Pinger2();
foreach (var r in replies)
{
TagService.log_Win.AppendLine(replies.Select(r => r.RoundtripTime).ToString());
}
private async Task<IEnumerable<PingReply>> Pinger2()
{
var tasks = addresses.Select(async ip => await new Ping().SendPingAsync(ip, 2000));
var replies = await Task.WhenAll(tasks);
return replies;
}

您只需要在lambda 中await

private async Task<IEnumerable<PingReply>> Pinger2()
{
var tasks = addresses.Select(async ip => await new Ping().SendPingAsync(ip, 2000));
var replies = await Task.WhenAll(tasks);
return replies;
}

最新更新