/// <summary>Update the session state according to task results.</summary> private SessionData UpdateSession(SessionData session) { if (session.IsTaskRunning && !TaskService.TryGetRunningTask(session.RunningTaskId, out var _)) { if ( TaskService.TryGetTask(session.RunningTaskId, out var finishedTask) && finishedTask.Result is TaskData.Success && session.CurrentProblemId < Problems.Count && Problems.AsList[session.CurrentProblemId] == finishedTask.Problem ) { session = session.AdvanceToNextProblem(); } session = session.RemoveRunningTaskId(); } return(session); }