Skip to content
Cloudflare Docs
非官方翻译 - 此文档为非官方中文翻译版本,仅供参考。如有疑问请以 英文官方文档 为准。

调度任务

Agent 可以通过调用 this.schedule(when, callback, data) 来调度未来运行的任务,其中 when 可以是延迟、Date 或 cron 字符串;callback 是要调用的函数名,data 是要传递给函数的数据对象。

调度任务可以做用户请求或消息能做的任何事情:发出请求、查询数据库、发送邮件、读写状态:调度任务可以调用您的 Agent 上的任何常规方法。

调度任务

您可以在 Agent 的任何方法中调用 this.schedule,并为每个单独的 Agent 调度数万个任务:

import { Agent } from "agents";
export class SchedulingAgent extends Agent {
async onRequest(request) {
// 处理传入请求
// 调度一个5分钟后的任务
// 调用"checkFlights"方法
let { taskId } = await this.schedule(600, "checkFlights", {
flight: "DL264",
date: "2025-02-23",
});
return Response.json({ taskId });
}
async checkFlights(data) {
// 当我们的调度任务运行时被调用
// 我们也可以在这里调用 this.schedule 来调度另一个任务
}
}

您可以通过多种方式调度任务:

// 调度一个在10秒后运行的任务
let task = await this.schedule(10, "someTask", { message: "hello" });
// 调度一个在特定日期运行的任务
let task = await this.schedule(new Date("2025-01-01"), "someTask", {});
// 调度一个每10秒运行的任务
let { id } = await this.schedule("*/10 * * * *", "someTask", {
message: "hello",
});
// 调度一个每10秒运行的任务,但只在周一
let task = await this.schedule("0 0 * * 1", "someTask", { message: "hello" });
// 取消调度任务
this.cancelSchedule(task.id);

调用 await this.schedule 返回一个 Schedule,其中包含任务随机生成的 id。您可以使用此 id 在将来检索或取消任务。它还提供一个 type 属性,指示调度类型,例如,"scheduled" | "delayed" | "cron" 之一。

管理调度任务

您可以使用调度 API 在 Agent 内获取、取消和过滤调度任务:

// 通过 ID 获取特定调度
// 如果任务不存在则返回 undefined
let task = await this.getSchedule(task.id);
// 获取所有调度任务
// 返回 Schedule 对象数组
let tasks = this.getSchedules();
// 通过 ID 取消任务
// 如果任务被取消则返回 true,如果不存在则返回 false
await this.cancelSchedule(task.id);
// 过滤特定任务
// 例如,未来一小时内开始的所有任务
let tasks = this.getSchedules({
timeRange: {
start: new Date(Date.now()),
end: new Date(Date.now() + 60 * 60 * 1000),
},
});