예제 #1
0
        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);
        }
예제 #2
0
        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));
        }