Skip to content

任务调度器

在开发过程中,常常会遇到需要执行定时任务的情况。为了满足这种需求,框架特别设计了一个任务调度器,用于高效地管理和执行这些定时任务。这个调度器不仅能够简化定时任务的配置与执行过程,还可以灵活地设置任务的触发条件和时间间隔,从而提高开发效率,确保任务的准确性和可靠性。

需要使用当前场景(Scene)中的 TimerComponent 组件:

  • Unity:支持Unity的时间缩放的时间任务调度。(只有Unity平台下有)
  • Net:根据系统事件的任务调度。

WaitAsync

在当前代码中,可以通过设置延时来等待一段时间后再继续执行后续逻辑,从而确保依赖的资源准备就绪或前置条件满足。

  • time参数:毫秒单位

WaitAsync

// 等待1秒后执行下面的逻辑。
await scene.TimerComponent.Net.WaitAsync(1000);

WaitTillAsync

在当前代码中,可以通过设置延时来等待一段时间后再继续执行后续逻辑,从而确保依赖的资源准备就绪或前置条件满足。

  • time参数:绝对时间,毫秒单位

WaitTillAsync

// 等待1秒后执行下面的逻辑。
// 唯一不同的这个要求传入的是绝对时间,所以这个参数是当前的时间+1000。
await scene.TimerComponent.Net.WaitTillAsync(TimeHelper.Now + 1000);

WaitFrameAsync

在当前代码中,等待一帧的时间。

WaitFrameAsync

await scene.TimerComponent.Net.WaitFrameAsync();

OnceTimer

设置一个定时任务,指定在未来的某个特定时间自动执行。

Action

传递一个Action在未来的某个时间执行。

  • time参数:毫秒单位
  • action:时间到执行的回调。
  • 返回参数:返回一个时间任务的Id,可以通过这个Id取消这个任务。

OnceTimer Action

var timerId = _scene.TimerComponent.Net.OnceTimer(1000 * 60, () =>
{
    Log.Debug("Timer started");
});

Event

Action 已经能够满足大部分需求,但在某些情况下,可能会遇到热重载的问题。由于 Action 在热重载时无法替换为新的 Action,因此需要采用 Event 的方式。在热重载过程中,新的 Event 会覆盖旧的,从而确保系统正常更新。

  • time参数:毫秒单位
  • Event参数:传入一个事件参数,如果不知道怎么定义可以参考事件系统
  • 返回参数:返回一个时间任务的Id,可以通过这个Id取消这个任务。

OnceTimer Event

var timerId = _scene.TimerComponent.Net.OnceTimer(1000 * 60, new TestEvent());

这样定义完成后,只需要订阅TestEvent事件就可以了。

OnceTillTimer

这个方法同OnceTimer一样,唯一不同的是time参数的时间是绝对时间。

OnceTillTimer

// 这个传入的是未来的时间,所以这个参数是当前的时间+1000 * 60也就是未来1分钟后执行。
// 执行Action
var timerId = _scene.TimerComponent.Net.OnceTillTimer(TimeHelper.Now + 1000 * 60, () =>
{
    Log.Debug("Timer started");
});
// 执行Event
var timerId = _scene.TimerComponent.Net.OnceTillTimer(TimeHelper.Now + 1000 * 60, new TestEvent());

RepeatedTimer

执行一个任务,该任务会按照指定的时间间隔反复运行,直到明确取消为止。

Action

传递一个Action在未来的某个时间执行。

  • time参数:毫秒单位
  • action:时间到执行的回调。
  • 返回参数:返回一个时间任务的Id,可以通过这个Id取消这个任务。

OnceTimer Event

var timerId = _scene.TimerComponent.Net.RepeatedTimer(1000 * 60, () =>
{
    Log.Debug("Timer started");
});

Event

Action 已经能够满足大部分需求,但在某些情况下,可能会遇到热重载的问题。由于 Action 在热重载时无法替换为新的 Action,因此需要采用 Event 的方式。在热重载过程中,新的 Event 会覆盖旧的,从而确保系统正常更新。

  • time参数:毫秒单位
  • Event参数:传入一个事件参数,如果不知道怎么定义可以参考事件系统
  • 返回参数:返回一个时间任务的Id,可以通过这个Id取消这个任务。

OnceTimer Event

var timerId = _scene.TimerComponent.Net.RepeatedTimer(1000 * 60, new TestEvent());

Remove

根据任务Id,取消一个任务。

  • timerId:要取消的任务Id。

Remove

scene.TimerComponent.Net.Remove(timerId);