异步获取IP Ping结果c#

时间:2015-07-16 05:27:34

标签: c# asp.net asynchronous ip ping

我的情况是我有一个IP地址列表。我想立即与所有这些进程一起启动ping进程,这应该是异步的。

private async Task<List<PingReply>> PingAsync()
{
   Ping pingSender = new Ping();
  var tasks = theListOfIPs.Select(ip => pingSender.SendPingAsyn(ip,2000));
   var results = await Task.WhenAll(tasks);

   return results.ToList();
}

根据我的理解,此操作将等待直到返回所有ping结果。我想要做的是,只要一个结果完成,我想利用这个结果。因此,只要一个ping返回结果,我想立即存储它而不等待其他ping完成。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

  

我想要做的是,只要完成一个结果,我就想利用这个结果。

我认为最干净的解决方案是定义“ping和进程”操作:

private async Task<PingReply> PingAndProcessAsync(Ping pingSender, string ip)
{
  var result = await pingSender.SendPingAsync(ip, 2000);
  ProcessPingResult(result);
  return result;
}

然后同时运行多个:

private async Task<List<PingReply>> PingAsync()
{
  Ping pingSender = new Ping();
  var tasks = theListOfIPs.Select(ip => PingAndProcessAsync(pingSender, ip));
  var results = await Task.WhenAll(tasks);
  return results.ToList();
}

答案 1 :(得分:0)

在这种情况下你可以使用WaitAny

(function($){

    $(function(){  //document.ready

    });

    (function recurseEvent(element){

            element.doStuff();

            setTimeout(function(){
                recurseEvent(element);
            }, 2000);

    })($('#myElement'));

})(jQuery);

以下版本是loger,但我认为这可能对你有帮助..

  var results = await Task.WaitAny (tasks);