9.2. 解决和倾听显示进度
当用户等待某个解决方案时,当解决问题时,可能需要等待几分钟或几小时后才会收到结果。为确保一切顺利的用户,通过显示最佳解决方案以及目前获得的最佳分数来显示进度。
流程
要处理中间最佳解决方案,请使用
solveAndListen(…):public class TimeTableService { private SolverManager<TimeTable, Long> solverManager; // Returns immediately public void solveLive(Long timeTableId) { solverManager.solveAndListen(timeTableId, // Called once, when solving starts this::findById, // Called multiple times, for every best solution change this::save); } public TimeTable findById(Long timeTableId) {...} public void save(TimeTable timeTable) {...} public void stopSolving(Long timeTableId) { solverManager.terminateEarly(timeTableId); } }此实施使用数据库与 UI 通信,后者轮询数据库。更高级的实施将最佳的解决方案直接推送到 UI 或消息传递队列。
-
用户对中间最佳解决方案满意且不想等待更长的时间,请致电
SolverManager.terminateEarly(problemId)。