public async Task Run([TimerTrigger("*/30 * * * * *")] TimerInfo myTimer, ILogger log) { log.LogInformation("Worker running at: {time}", DateTime.Now.ToString("d/MM/yy HH:mm")); if (_options.Items == null) { log.LogError("No items loaded from settings"); } await _discordService.UpdateDiscordMessages(_options.Items); var tasks = new List <Task <IEnumerable <InStockItem> > >(); var discordAlertTasks = new List <Task>(); if (_options.Items != null) { try { log.LogInformation("Checking {count} items", _options.Items.Count); foreach (var item in _options.Items) { var linked = !string.IsNullOrEmpty(item.DiscordChannel); log.LogInformation("Checking {name} and discord channel is {linked} with {id}", item.Name, linked, item.DiscordChannelId); foreach (var store in _storeServices) { var task = store.GetItemInStock(item); discordAlertTasks.Add(AlertDiscord(log, task)); tasks.Add(task); } } } catch (Exception e) { log.LogError(e, "Failed getting status"); await _discordService.SendError(_discordOptions.ErrorChannel, e.Message); } } var list = (await Task.WhenAll(tasks)).SelectMany(result => result); var outOfStock = _options.Items.Where(item => !list.Where(i => i.Name == item.Name).Any()); await SendOutOfStock(log, outOfStock); await Task.WhenAll(discordAlertTasks); }