protected override async Task ExecuteAsync(CancellationToken stoppingToken) { // Reset event var mre = new ManualResetEvent(false); await _discordBot.Connect(_settings.DiscordBotToken); _discordSocketClient.Ready += () => { _logger.LogInformation("Discord client is ready"); return(Task.CompletedTask); }; _discordSocketClient.GuildAvailable += guild => { _logger.LogInformation("Discord guild is ready"); mre.Set(); return(Task.CompletedTask); }; // Wait for all connectable services to be ready mre.WaitOne(); // Announce vehicles Task.Run(async() => { while (true) { using var scope = _serviceProvider.CreateScope(); var context = scope.ServiceProvider.GetRequiredService <VehicleContext>(); var vehicles = await context.Vehicles.ToListAsync(stoppingToken); await _discordBot.AnnounceCars(_settings.DiscordGuildId, _settings.DiscordChannelId, vehicles); await Task.Delay(TimeSpan.FromMinutes(15), stoppingToken); } }); await Task.Delay(Timeout.Infinite, stoppingToken); }