public async Task Loop() { while (true) { await this.AddOrder(OrdersQueue.CreateRandomOrder()); Thread.Sleep(5000); } }
/// <summary> /// Method that checks all of the orders after delivery. /// </summary> /// <param name="obj"></param> /// <param name="args"></param> public void CheckOrders(object obj, EventArgs args) { var temp = new List <Order>(OrdersQueue.ToArray()); OrdersQueue.Clear(); foreach (var item in temp) { if (!MakeOrder(item)) { OrdersQueue.Append(item); } } }
/// <summary> /// Сhecks whether the order can be fulfilled and executes if it can. /// </summary> /// <param name="order"></param> /// <returns></returns> public bool MakeOrder(Order order) { bool IsEnough = true; var temp = new Dictionary <string, int>(); foreach (var item in order.Basket) { temp.Add(item.Key, item.Value); } foreach (var item in temp) { if (AllItems[item.Key] < item.Value) { order.Basket[item.Key] -= AllItems[item.Key]; AllItems[item.Key] = 0; var tempGood = ListForProvider.LastOrDefault(x => x == item.Key); if (tempGood == null) { ListForProvider.Add(item.Key); } IsEnough = false; } else { AllItems[item.Key] -= item.Value; if (AllItems[item.Key] == 0) { var tempGood = ListForProvider.LastOrDefault(x => x == item.Key); if (tempGood == null) { ListForProvider.Add(item.Key); } } order.Basket.Remove(item.Key); } } if (!IsEnough) { OrdersQueue.Add(order); } return(IsEnough); }