public override async Task DoWorkAsync(CancellationToken cancellationToken) { var inventoryItems = await _inventoryService.GetInventoryAsync(); var cardsToSell = inventoryItems .FilterByMarketable() .FilterByCommodity() .FilterByType(ItemType.TradingCard); _logger.LogDebug($"Filtered cards to sell: '{cardsToSell.Count}'"); foreach (var card in cardsToSell) { _delayedExecutionPool.EnqueueTaskToPool(async() => { var price = await _marketService.GetItemPriceAsync(card); if (price.LowestPrice == null && price.MedianPrice == null) { return; } var calculatedPrice = price.LowestPrice > PriceHelper.ExpensivePrice && price.LowestPrice < price.MedianPrice ? PriceHelper.CalculateSellerPrice(price.LowestPrice, true) : PriceHelper.CalculateSellerPrice(price.MedianPrice, true); if (card.IsCardFoil()) { _logger.LogInformation($"Sending foil '{card.MarketHashName}'. Cost '{calculatedPrice}', lowest price '{price.LowestPrice}', median price '{price.MedianPrice}'"); } await _marketService.SellItemAsync(card, calculatedPrice); }); } }