Распараллеливание вызовов 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);