private void HandleSecondPool() { Row Data; if (FirstPoolDone()) { Debug.WriteLine("First Queue is [DONE] going to second queue"); } while (!SecondPoolDone()) { while (_storageStatusQueue.TryDequeue(out Data)) { int id = Convert.ToInt32(Data.Values[0]); if (ProductDictionary.ContainsKey(id)) { ProductDictionary[id].StorageWithAmount.TryAdd(Convert.ToInt32(Data.Values[1]), Convert.ToInt32(Data.Values[2])); } else { DisabledProducts[id].StorageWithAmount.TryAdd(Convert.ToInt32(Data.Values[1]), Convert.ToInt32(Data.Values[2])); } Interlocked.Increment(ref _doneStorageStatusCount); } while (_storageTransactionsQueue.TryDequeue(out Data)) { int ProductID = Convert.ToInt32(Data.Values[1]); int SourceID = Convert.ToInt32(Data.Values[4]); int DestinationID = Convert.ToInt32(Data.Values[5]); if (StorageRoomDictionary.ContainsKey(SourceID) && StorageRoomDictionary.ContainsKey(DestinationID)) { StorageTransaction StorageTrans = new StorageTransaction(Data, true); StorageRoom Source = StorageRoomDictionary[SourceID]; StorageRoom Destination = StorageRoomDictionary[DestinationID]; BaseProduct prod; if (ProductDictionary.ContainsKey(ProductID)) { prod = ProductDictionary[ProductID]; } else { prod = DisabledProducts[ProductID]; } StorageTrans.SetInformation(Source, Destination, prod); StorageTransactionDictionary.TryAdd(StorageTrans.ID, StorageTrans); } Interlocked.Increment(ref _doneStorageTransactionCount); } while (_orderTransactionsQueue.TryDequeue(out Data)) { OrderTransaction OrderTrans = new OrderTransaction(Data, true); int ProductID = Convert.ToInt32(Data.Values[1]); if (ProductDictionary.ContainsKey(ProductID)) { OrderTrans.SetInformation(ProductDictionary[ProductID]); } else { OrderTrans.SetInformation(DisabledProducts[ProductID]); } OrderTransactionDictionary.TryAdd(OrderTrans.ID, OrderTrans); Interlocked.Increment(ref _doneOrderTransactionCount); } } }