/// <summary> /// Gets a new Solution from the _solutionsQueue and processes it. /// </summary> private void TakeNewSolutions() { foreach (var solution in _solutionsQueue.GetConsumingEnumerable()) { Task processingSolutionTask = Task.Run(() => ProcessSolution(solution)); AlgorithmTasks.Add(solution.Id, processingSolutionTask); } void ProcessSolution(ToSolution solution) { SolverValidator.Validate(solution); SolverEvaluator.Evaluate(solution); } }
private async Task ResetSolverState() { _solutionsQueue.CompleteAdding(); await Task.WhenAll(_solverTasks); _solutionsQueue.Dispose(); _solutionsQueue = default; _executionFunc = default; Points = default; Problem = default; CityMapGraph = default; BestSolution = default; CurrentStage = default; IsMonitoringEnabled = default; WorkingConfiguration = default; PreviousStageSolutionCost = default; CurrentStageExecutionTime = default; CurrentAlgorithm = AlgorithmType.None; _solverTasks.Clear(); AlgorithmTasks.Clear(); ConstraintsToRelax.Clear(); }