protected override async Task ExecuteAsync(CancellationToken stoppingToken) { long lastId = 0; while (!stoppingToken.IsCancellationRequested) { try { // Rate limited to 75 calls per 15 minutes, 5 calls per minute. // We rely on the configured delay: DelayBetweenMentionCalls... var mention = await _twitterClient.GetMostRecentMentionedTweetAsync(); if (mention != null && lastId != mention.Id) { if (mention.FullText .Contains(_settings.TwitterHandle, StringComparison.OrdinalIgnoreCase)) { _ = await MessageResource.CreateAsync( body : $"{mention.Url}. Someone mentioned you on Twitter! Reply with 'Yes' to retweet this...", from : new PhoneNumber(_settings.TwilioFromPhoneNumber), to : new PhoneNumber(_settings.ToPhoneNumber)); lastId = mention.Id; } } } catch (Exception ex) { _logger.LogError(ex.Message, ex); } finally { await Task.Delay( _settings.DelayBetweenMentionCalls, stoppingToken); } } }