protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { if (!_eventsSubscribed) { _eventSubscriber .Subscribe <NewProductAddedEvent>() .OnFailure(cf => { cf.RetryForTimes(5) .ForEachRetryWait(TimeSpan.FromSeconds(5)) .ShouldRetry() .ShouldDiscardEventAfterFailures(); }); using (var scope = _serviceProvider.CreateScope()) { await scope.ServiceProvider.GetService <IEventPublisher>().PublishAsync(new NewProductAddedEvent()); } await _eventSubscriber.StartListeningAsync(); _eventsSubscribed = true; } } }