public async Task <List <PingResult> > PingScan(PingScanInput pingScanInput) { var result = new BlockingCollection <PingResult>(); var addressesPacks = pingScanInput.Addresses.ChunkInto(pingScanInput.Workers); await AsyncHelper.ForEach(addressesPacks, async (addressPack, token) => { foreach (var address in addressPack) { if (token.IsCancellationRequested) { break; } var pingResult = await Ping(new PingInput { Address = address, Retries = pingScanInput.Retries, Timeout = pingScanInput.Timeout }); result.Add(pingResult); OnDeviceScanned(pingResult); } }, pingScanInput.CancellationToken); var finalResult = result.ToList(); OnDevicesScanComplete(finalResult); return(finalResult); }
public Task <List <ProcessingQueueItem <PingInput, PingResult> > > PingScan(PingScanInput pingScanInput, CancellationToken token = default) { var input = pingScanInput.Addresses.Select(s => new PingInput { Address = s, Retries = pingScanInput.Retries, Timeout = pingScanInput.Timeout }).ToList(); return(Run(input, token)); }