问题描述
小的是新手,在学习中想用MVC测试一下网络监控在异步控制器里使用了ping.SendPingAsync(ip,1000)这个方法去异步检测各网络现在的问题是,如果不使用AWAIT,异步线程还没结束时returnView()就执行了,前台页面得不到dict的数据;如果使用了AWAIT,因为在循环的时候SendPingAsync每次只PING一个IP,这样并没有起到异步作用,导制前台需要较长时间才能得到数据。查资料查得发吐,请问有没有办法把AWAIT弄到foreach外,让所有线程执行完后再返回结果?我不知道表达清楚没有,请各位伸出援手,谢谢啦namespaceIpTest.Controllers{publicclassIpTestController:AsyncController{////GET:/IpTest/publicActionResultIndex(){returnView();}publicasyncTask<ActionResult>IpTestAsync(){variplist=newstring[]{"www.baidu.com","www.163.com","www.sina.com","www.google.com","www.qq.com","192.168.7.1","61.139.2.69","192.168.17.1","www.icast.net","192.168.1.1","192.168.3.3"};Dictionary<string,string>dict=newDictionary<string,string>();//DateTimedt1=DateTime.Now;foreach(varipiniplist){using(Pingmyping=newPing()){PingReplyx=await(myping.SendPingAsync(ip,1000));dict.Add(ip,x.Status.ToString());}}//DateTimedt2=DateTime.Now;//ViewBag.time=newTimeSpan(dt2.Ticks-dt1.Ticks).ToString();ViewBag.dict=dict;returnView();}}}
解决方案
本帖最后由 x_image 于 2014-07-24 11:25:43 编辑
解决方案二:
这么多天都没人肯帮助一下不过自己搞定了,还是用SendPingAsync,结合Task集合就行了
解决方案三:
解决方案四:
能分享下代码看看嘛,为毛我调试的时候总是同步执行效果
解决方案五:
能分享一下代码吗,为毛我使用异步控制单步调试的时候跟同步没啥区别
解决方案六:
引用4楼ouchenghua的回复:
能分享一下代码吗,为毛我使用异步控制单步调试的时候跟同步没啥区别
代码在单位,回去发给你