Могу ли я иметь параллельные экземпляры асинхронной реализации ping? - PullRequest
0 голосов
/ 01 сентября 2011

Я бы хотел пинговать много разных хостов одновременно..NET обрабатывает этот параллелизм для меня, или я должен реализовать это сам?

Например, следующий объект внутренне использует асинхронную версию ping:

Mypinger.Tracert("microsoft.com");

И у меня может быть другой экземпляр, который делает то же самое, но с другим хостом вв то же время :

Mypinger.Tracert("google.com");

Что мешает одновременным асинхронным методам взаимодействовать друг с другом?

Какое ограничение на параллелизм?

1 Ответ

1 голос
/ 01 сентября 2011

Да. Используйте Async варианты различных методов класса Ping.

Адаптировано из примеров в документации класса Ping :

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 вызвали данный ответ. На самом деле нет никаких ограничений на параллелизм, за исключением подключения к сети.

...