【问题标题】:Can I have concurrent instances of the async implementation of ping?我可以有 ping 的异步实现的并发实例吗?
【发布时间】:2011-11-08 01:56:32
【问题描述】:

我想同时 ping 多个不同的主机。 .NET 会为我处理这种并发,还是我必须自己实现?

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

Mypinger.Tracert("microsoft.com");

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

Mypinger.Tracert("google.com");

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

并发限制是多少?

【问题讨论】:

    标签: c# .net multithreading concurrency ping


    【解决方案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 请求触发了给定的响应。并发确实没有限制,不包括连接沼泽。

    【讨论】:

    • 我正在使用异步版本,但我想让我的多线程应用程序 ping 微软,而其他 ping 谷歌,同时。我不希望 ping 在实例之间混淆。换句话说,网络上的数据包和每个(新)ping 实例之间是否存在链接?
    猜你喜欢
    • 2020-09-13
    • 2019-04-08
    • 2020-02-11
    • 2018-05-23
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 2014-12-18
    相关资源
    最近更新 更多