我的情况是我有一个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完成。
我该怎么做?
答案 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);