我可以拥有ping的异步实现的并发实例吗?

时间:2011-09-01 01:34:27

标签: c# .net multithreading concurrency ping

我想同时ping许多不同的主机。 .NET是否为我处理这种并发性,或者我必须自己实现它?

例如,以下对象在内部使用ping的异步版本:

Mypinger.Tracert("microsoft.com");

我可能有一个不同的实例做同样的事情,但同时到另一个主机

Mypinger.Tracert("google.com");

是什么阻止了每个实例的并发Async方法相互干扰?

并发的限制是什么?

1 个答案:

答案 0 :(得分:1)

是。使用Ping类上的各种方法的 Async 变体。

改编自Ping class documentation

中的示例
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请求触发了给定响应。并发性确实没有限制,不包括连接淹没。