protected override async Task ExecuteAsync(CancellationToken stoppingToken) { _logger.LogDebug("{serviceName} is starting", nameof(BackgroundConsumeTwitterFeed)); stoppingToken.Register(() => _logger.LogDebug("{serviceName} background task is stopping.", nameof(BackgroundConsumeTwitterFeed))); while (!stoppingToken.IsCancellationRequested) { _logger.LogDebug("{serviceName} task doing background work.", nameof(BackgroundConsumeTwitterFeed)); var client = await _credentialProvider.GetAuthenticatedTwitterClient(); var sampleStream = client.StreamsV2.CreateSampleStream(); sampleStream.TweetReceived += (_, eventArgs) => { try { _tweetProcessor.ProcessTweet(eventArgs.Tweet); } catch (TwitterAuthException e) { _logger.LogError(e, "Auth exception, check credentials"); } catch (TwitterException e) { _logger.LogError(e, "Error from twitter"); } catch (Exception e) { _logger.LogError(e, "Error processing tweet"); } }; await sampleStream.StartAsync(); } _logger.LogDebug("{serviceName} background task is stopping.", nameof(BackgroundConsumeTwitterFeed)); await Task.CompletedTask; }