protected override async Task ExecuteAsync(CancellationToken stoppingToken) { var subscriber = _redisMultiplexer.GetSubscriber(); var observable = Observable.Create <FileEvent>(async(obs, ct) => { await subscriber.SubscribeAsync(_fileEventKey, (_, message) => { obs.OnNext(FromRedisValue(message)); }).ConfigureAwait(false); return(Disposable.Create(() => subscriber.Unsubscribe(_fileEventKey))); }); using (var subscription = observable.Subscribe(async(message) => { try { await _videoRepository.AddVideoFile(message.filename, message.id); } catch (Exception e) { _logger.LogError(e, "Error while recording file event."); } })) { //This is to prevent the service from being disposed while (true) { await Task.Delay(1000); } } }