我想同时ping许多不同的主机。 .NET是否为我处理这种并发性,或者我必须自己实现它?
例如,以下对象在内部使用ping的异步版本:
Mypinger.Tracert("microsoft.com");
我可能有一个不同的实例做同样的事情,但同时到另一个主机 :
Mypinger.Tracert("google.com");
是什么阻止了每个实例的并发Async方法相互干扰?
并发的限制是什么?
答案 0 :(得分:1)
是。使用Ping
类上的各种方法的 Async 变体。
private void SendPing()
{
// ...
Ping pingSender = new Ping();
pingSender.PingCompleted +=
new PingCompletedEventHandler(PingCompletedCallback);
// the async methods don't block,
// and execution will continue after the following call
pingSender.SendAsync(address, userToken);
// ...
}
private void PingCompletedCallback(object sender, PingCompletedEventArgs e)
{
// ...
PingReply reply = e.Reply;
object userToken = e.UserState;
// ...
}
关于编辑和评论,尽管ICMP通信通常是无状态的,但ECHO消息(在ping中使用)保持连接状态,因此知道ping请求触发了给定响应。并发性确实没有限制,不包括连接淹没。