class Task(
val name: String,
val dependencies: List<String>,
val execute: () -> Unit
)
class TaskScheduler {
private val tasks = mutableMapOf<String, Task>()
private val taskExecutionOrder = mutableListOf<String>()
fun registerTask(task: Task) {
tasks[task.name] = task
}
fun scheduleTasks() {
val visited = mutableSetOf<String>()
fun dfs(taskName: String) {
if (taskName in visited) return
visited.add(taskName)
val task = tasks[taskName]?: return
task.dependencies.forEach { dfs(it) }
taskExecutionOrder.add(taskName)
}
tasks.keys.forEach { dfs(it) }
}
fun executeTasks() {
taskExecutionOrder.forEach { taskName ->
val task = tasks[taskName]?: return
logBeforeExecution(taskName)
task.execute()
logAfterExecution(taskName)
}
}
private fun logBeforeExecution(taskName: String) {
println("Before executing task: $taskName")
}
private fun logAfterExecution(taskName: String) {
println("After executing task: $taskName")
}
}
fun main() {
val scheduler = TaskScheduler()
scheduler.registerTask(Task("TaskA", emptyList()) {
println("Executing TaskA")
})
scheduler.registerTask(Task("TaskB", listOf("TaskA")) {
println("Executing TaskB")
})
scheduler.registerTask(Task("TaskC", listOf("TaskB")) {
println("Executing TaskC")
})
scheduler.scheduleTasks()
scheduler.executeTasks()
}
Task
类:
- 用于表示一个任务,包含任务名称
name
,依赖的任务名称列表dependencies
,以及实际执行任务的Lambda表达式execute
。
TaskScheduler
类:
tasks
:用于存储所有注册的任务,以任务名称为键。
taskExecutionOrder
:用于存储任务的执行顺序。
registerTask
方法:用于注册任务到任务调度器中。
scheduleTasks
方法:使用深度优先搜索(DFS)来确定任务的执行顺序,避免循环依赖。
executeTasks
方法:按照确定的执行顺序执行任务,并且在每个任务执行前和执行后调用相应的日志记录方法。
logBeforeExecution
和logAfterExecution
方法:用于记录任务执行前和执行后的日志。
main
函数:
- 创建一个
TaskScheduler
实例。
- 注册三个任务,
TaskA
没有依赖,TaskB
依赖TaskA
,TaskC
依赖TaskB
。
- 调度任务并执行任务,观察输出结果。