Распараллеливание вызовов SendAsync (возможно с использованием LINQ) - C#

Узнай цену своей работы

Формулировка задачи:

Несколько дней ищу ответ на вопрос : как хорошо распределить вызовы

Ping.SendAsync

. Последний вариант который я пробовал -
Листинг программы
  1. // workingIPs - массив IPAddress
  2. var temp =
  3. from ip in workingIPs.AsParallel().WithDegreeOfParallelism(16)
  4. let p = new Ping().Send(ip, 5)
  5. where (p.Status == IPStatus.Success)
  6. select p.Address;
  7. List<IPAddress> result = temp.ToList<IPAddress>();
  8. return result;
Но он работает медленно, у меня ~17 секунд на 256 адресов.

Пожалуйста

, помогите его доделать, сил уже нет.

Решение задачи: «Распараллеливание вызовов SendAsync (возможно с использованием LINQ)»

textual
Листинг программы
  1. //workingIPs - массив IPAddress
  2. //result is global variable
  3. List<IPAddress> result = new List<IPAddress>();
  4. Ping ping = new Ping();
  5. ping.PingComplated = (sender, e) =>
  6. {
  7.   if (e.Error == null)
  8.     //doing something with IP, that stored in e.UserState;
  9.     lock (result) result.Add(e.UserState as IpAddress);
  10. };
  11. foreach (var ip in workingIPs)
  12.   ping.SendAsync(ip, 5, ip);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.667 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы