C# C中ping的限制时间#
我需要在短时间内在本地网络中ping ~20台计算机。但是,如果我对不存在的主机(计算机已关闭)使用C# C中ping的限制时间#,c#,timeout,ping,C#,Timeout,Ping,我需要在短时间内在本地网络中ping ~20台计算机。但是,如果我对不存在的主机(计算机已关闭)使用Ping类,我必须等待约2.5秒,尽管超时时间为50毫秒。我怎么能只等待PingReply 50毫秒,如果没有回复,只需检查下一个主机 下面是代码示例: foreach (var singleUser in userList) { try { Ping userPing = new Ping(); PingRe
Ping
类,我必须等待约2.5秒,尽管超时时间为50毫秒。我怎么能只等待PingReply 50毫秒,如果没有回复,只需检查下一个主机
下面是代码示例:
foreach (var singleUser in userList)
{
try
{
Ping userPing = new Ping();
PingReply reply = userPing.Send(singleUser, 50);
if (reply.Status == IPStatus.Success)
{
userInfo.Add(singleUser, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
}
}
catch (Exception exc)
{
//host not exists
}
}
也许这有帮助谢谢,我看过了。但我不想使用异步代码变得更复杂,并且在处理acync调用的HostNotFound异常时会出现问题。不同意。异步是进行此操作的唯一方法。System.Threading.Tasks使异步操作的处理变得非常简单。这比试图找到一个解决问题的同步解决方案要容易得多。你不能既有蛋糕又吃。使用同步方法并缩短超时时间将导致错误(找不到主机)。因此,正确的解决方案是使用异步方法。要处理HostNotFound,请创建一个IP和Ping响应字典,该字典设置为false。对于每个成功的ping,将响应设置为True。保留为false的响应是HostNotFound。@ShannonHolsinger我需要在.Net 3.5上设置目标,因此我不能使用System.Threading.Tasks@你是说Ping.SendAsync还是类似IAsyncResult?那么IP呢?如果我使用Dns.GetHostEntry(“Myhost”)——对于禁用的主机,我也会在2.5秒后得到HostNotFound异常。