Распараллеливание вызовов SendAsync (возможно с использованием LINQ) - C#
Формулировка задачи:
Несколько дней ищу ответ на вопрос : как хорошо распределить вызовы
Но он работает медленно, у меня ~17 секунд на 256 адресов.
Ping.SendAsync
. Последний вариант который я пробовал -
Листинг программы
- // workingIPs - массив IPAddress
- var temp =
- from ip in workingIPs.AsParallel().WithDegreeOfParallelism(16)
- let p = new Ping().Send(ip, 5)
- where (p.Status == IPStatus.Success)
- select p.Address;
- List<IPAddress> result = temp.ToList<IPAddress>();
- return result;
Пожалуйста
, помогите его доделать, сил уже нет.Решение задачи: «Распараллеливание вызовов SendAsync (возможно с использованием LINQ)»
textual
Листинг программы
- //workingIPs - массив IPAddress
- //result is global variable
- List<IPAddress> result = new List<IPAddress>();
- Ping ping = new Ping();
- ping.PingComplated = (sender, e) =>
- {
- if (e.Error == null)
- //doing something with IP, that stored in e.UserState;
- lock (result) result.Add(e.UserState as IpAddress);
- };
- foreach (var ip in workingIPs)
- ping.SendAsync(ip, 5, ip);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д