在一个局域网中,需要检查所有机器是否能Ping通

System.Net.NetworkInformation.Ping类提供了几个方法:

  • Send :同步方式发送一个ICMP数据包,返回PingReply
  • SendPingAsync:异步方式发送ICMP数据包,返回Task<PingReply>

方式1:同步方式(主程序与Ping命令同步,多个Ping以同步方式运行)

此时,界面会阻塞,无法使用

for (int i = 1; i < 254; i++) {PingReply reply1 =  p1.Send("10.127.0."+i.ToString());Console.WriteLine("10.127.0." + i.ToString()+":"+reply1.Status.ToString());}

方式2:每个Ping以异步方式

此时,界面不会阻塞,但每个Ping之间是串行执行,效率也低

public async  void test(){for (int i = 1; i < 254; i++){PingReply reply1 = await p1.SendPingAsync("10.127.0."+i.ToString());Console.WriteLine("10.127.0." + i.ToString()+":"+reply1.Status.ToString());}
}

方式3:多个线程同时发送异步ping

 List<string> theListOfIPs = new List<string>();for (int i = 1; i < 254; i++)theListOfIPs.Add("10.127.0." + i.ToString());
var tasks = theListOfIPs.Select(ip =>{Ping pingSender = new Ping();return pingSender.SendPingAsync(ip, 2000);});
var results = await Task.WhenAll(tasks);补充:
(1)使用匿名函数构造async/awaitFunc<Task> lambda = async () =>{await Task.WhenAll(tasks);};
(2)获取返回值
Console.WriteLine(tasks.ElementAt(0).Result.Status);

说明:

(1)List集合以及数组的扩展方法Select方法快速实现获取合中某个属性的所有值,此方法避免了自己写for循环或者foreach遍历的循环语句。

(2)用循环创建了一个tasks集合,使用SendPingAsync异步方式Ping主机,避免阻塞主线程。

(2)关键步骤是使用Task.WhenAll,会根据tasks集合,自动创建Task执行,并等待所有任务完成后,才结束。再执行后面的操作。

C#-异步Ping检查网络通断相关推荐

  1. python自动测试网络通断_Python测试网络连通性示例【基于ping】

    本文实例讲述了Python测试网络连通性.分享给大家供大家参考,具体如下: Python代码 #!/usr/bin/python # -*- coding:GBK -*- ""&q ...

  2. 只会用ping测试网络通不通?高级网工还会这么用

    今天咱们来聊聊PING命令.作为网工应该都是耳熟能详,PING作为ICMP协议工具之一,算是一个使用率很高的命令. 它的作用: 用来检测网络的连通情况和分析网络速度 根据域名得到服务器IP 根据pin ...

  3. MFC 判断网络通断IsNetworkAlive

    官方文档: https://docs.microsoft.com/en-us/windows/desktop/api/sensapi/nf-sensapi-isnetworkalive 1.包含头文件 ...

  4. 外网业务访问故障,ping时通时断,显示有请求超时time out处理过程

    类似问题参考: ip地址冲突导致ping时通时断显示超时问题处理过程_wj31932的博客-CSDN博客 无法上网故障排查过程及复现过程系ip冲突造成_wj31932的博客-CSDN博客_arp获取不 ...

  5. 手机有软件测试网络通不通,怎样使用ping命令测试网络通不通

    怎样使用ping命令测试网络通不通 本文介绍ping命令的使用,可以测试网络是否连通及传输数据的.接收情况. 怎样使用ping命令测试网络通不通 1.win7系统打开开始菜单,在搜索框中输入cmd,然 ...

  6. centos网络隔一段时间就断_“路由器隔一段时间就上不了网,断一下电又能用了,这是什么原因...

    有人留言问:"路由器隔一段时间就上不了网,断一下电又能用了,这是什么原因?"具体原因具体分析,下面和北京宽带通一起来看下这三种情况. 1.隔几十分钟就断网,有时候甚至隔几分钟就断一 ...

  7. ip地址冲突导致ping时通时断显示超时问题处理过程

    目录 1 现象 2 Ping的过程: 3 可能的原因: 4 排查过程 类似问题:ip冲突问题解决和复现过程_wj31932的博客-CSDN博客 无法上网故障排查过程及复现过程系ip冲突造成_wj319 ...

  8. centos 无法ping内网 Destination Host Unreachable

    centos 突然无法ping内网了. 本来是一直是好好的. 在这之前,当前服务器(centos 192.168.1.30)大量的在操作内网192.168.1.20服务器的数据库.. 会不会是流量大了 ...

  9. 网络通,但打不开网页——(本文来自黑客基地)

    网络通,但打不开网页--(本文来自黑客基地) 很多时候我们都会遇到这样的问题,明明已经连网,但似乎只能能上QQ,而不能上网,现在我们将相关的解决方法汇总起来以飨读者.  一.感染了病毒所致  这种情况 ...

最新文章

  1. 新兴内存技术准备突围
  2. 个人网盘倒下去 企业网盘顶起来
  3. mysql.func_Mysqlfunc.c
  4. Trie 树——搜索关键词提示
  5. 复合数值积分方法以及Python程序实现
  6. JavaScript比较中应使用哪个等于运算符(== vs ===)?
  7. 没有实现类,MyBatis 的方法是怎么执行的?
  8. .NET Core全新路线图
  9. 反射获取类的几种方法
  10. 再议libcurl编程
  11. mysql 修复表和优化表
  12. linux非阻塞输入函数,Linux fcntl函数设置阻塞与非阻塞
  13. python课程开课吧怎么样-廖雪峰总结的Python商业爬虫教程,请查收!
  14. Android2.2+opencv3.1配置实现
  15. ACM动态规划总结(by utobe67)
  16. PLC梯形图编程基础知识详解(转自:http://gongkong.ofweek.com/2014-09/ART-310012-11000-28882866_2.html)
  17. Python实现简单命令行版《中国象棋》不使用第三方库
  18. 运维是做什么的?史上最全互联网Linux工作规划!十分钟找到linux运维工程师职业方向!...
  19. 【破解EXE】VC程序的破解及修改一例
  20. 100以内所有质数的输出。

热门文章

  1. 学习笔记(1)centos7 下安装nginx
  2. H5嵌入原生开发小结----兼容安卓与ios的填坑之路
  3. ( 流水账1)周五--liphi--校服的联想
  4. 表格 树形结构 HTML 语言 CSS,HTML介绍(示例代码)
  5. 如何使用视频转换器将flv格式文件转换为MP4格式
  6. iOS App开发的那些事儿2:如何搭建合适的框架
  7. CloudStack4.1.1升级CloudPlatForm4.2.0实践手册
  8. JDBC 4.2 Specifications 中文翻译 -- 第九章 连接
  9. 做一个”合格“的程序员(二)——学习管理
  10. 同事反馈环:为什么度量和会议还不够充分