private async Task <TaskResult> Process(List <DailyTaskWrapper> tasks) { if (tasks.Count == 0) { return(TaskResult.CanNotBeDone); } // Nhiệm vụ đang làm. var doingTask = tasks.FirstOrDefault(item => item.State == TaskState.Received); // Số sao ít nhất. var minQuality = tasks.Min(item => item.Quality); // Xét nhiệm vụ với số sao ít nhất và dễ nhất. var task = tasks .Where(item => item.Quality == minQuality) .MinBy(item => item.Difficulty); if (TaskDifficulty.CanDo(task.Difficulty)) { return(await Process(doingTask, task)); } // Xét nhiệm vụ nhiều sao hơn. var harderTasks = tasks.Where(item => item.Quality == minQuality + 1).ToList(); if (harderTasks.Count > 0) { var harderTask = harderTasks.MinBy(item => item.Difficulty); return(await Process(doingTask, harderTask)); } return(TaskResult.CanNotBeDone); }