namespace Ocelot.Provider.Consul { using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using Logging; using ServiceDiscovery.Providers; using Values; public class PollConsul : IServiceDiscoveryProvider { private readonly IOcelotLogger _logger; private readonly IServiceDiscoveryProvider _consulServiceDiscoveryProvider; private readonly Timer _timer; private bool _polling; private List _services; public PollConsul(int pollingInterval, IOcelotLoggerFactory factory, IServiceDiscoveryProvider consulServiceDiscoveryProvider) { _logger = factory.CreateLogger(); _consulServiceDiscoveryProvider = consulServiceDiscoveryProvider; _services = new List(); _timer = new Timer(async x => { if (_polling) { return; } _polling = true; await Poll(); _polling = false; }, null, pollingInterval, pollingInterval); } public Task> Get() { return Task.FromResult(_services); } private async Task Poll() { _services = await _consulServiceDiscoveryProvider.Get(); } } }