private async Task <RSATable> FillTable(RSATable table, Graph graph, Demand demand, List <GraphPath> paths)
        {
            bool filled = false;

            foreach (var path in paths)
            {
                await InfoLogger.LogInformation($"trying path: {string.Join("->", path.Path)}  distance: {path.ToLinks(graph.Links).Sum(r => r.Length)}");

                List <AvailableSlot> availableTableSlots = GetAvailableTableSlots(graph, path, table);

                if (RSATableFill.FillDemandOnTable(ref table, graph, demand, path, availableTableSlots))
                {
                    filled = true;
                    await InfoLogger.LogInformation($"demand supplied\n");

                    await InfoLogger.LogInformation(table.ToStringTable());

                    supplied++;
                    break;
                }
            }

            if (filled == false)
            {
                await InfoLogger.LogInformation($"It's not possible to supply demand of {demand.Slots}  from {demand.NodeIdFrom} to {demand.NodeIdTo}\n");
            }
            return(table);
        }
        private async Task <RSATable> FillTable(RSATable table, Graph graph, Demand demand, List <Tuple <GraphPath, GraphPath> > paths)
        {
            bool filled = false;

            foreach (var path in paths)
            {
                var tableMemory = table.CopyObject <RSATable>();

                await InfoLogger.LogInformation($"trying main path: {string.Join("->", path.Item1.Path)} distance: {path.Item1.ToLinks(graph.Links).Sum(r=>r.Length)}");

                List <AvailableSlot> availableTableSlots = base.GetAvailableTableSlots(graph, path.Item1, tableMemory);

                if (RSATableFill.FillDemandOnTable(ref tableMemory, graph, demand, path.Item1, availableTableSlots))
                {
                    availableTableSlots = GetAdditionalAvailableTableSlots(graph, path, tableMemory);

                    await InfoLogger.LogInformation($"trying secundary path: {string.Join("->", path.Item2.Path)} distance: {path.Item2.ToLinks(graph.Links).Sum(r => r.Length)}");

                    if (RSATableFill.FillDemandOnTable(ref tableMemory, graph, demand, path.Item2, availableTableSlots, true))
                    {
                        DemandSupplyMemory.Add(new DemandLinkPair(demand, path));
                        filled = true;
                        await InfoLogger.LogInformation($"demand supplied\n");

                        table = tableMemory;
                        await InfoLogger.LogInformation(table.ToStringTable());

                        supplied++;
                        break;
                    }
                }
            }

            if (filled == false)
            {
                await InfoLogger.LogInformation($"It's not possible to supply demand of {demand.Slots}  from {demand.NodeIdFrom} to {demand.NodeIdTo}\n");
            }
            return(table);
        }