コード例 #1
0
        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);
        }