role Scheduler {
    has &.uncaught_handler is rw
}

调度程序是一段代码,它确定使用哪些资源来运行哪个任务以及何时运行。此角色包含适用于所有类型调度程序的代码。

例如对 Proc::AsyncPromiseSupply 的一些操作允许您明确指定调度程序;它们通常希望这些调度程序遵循由 Scheduler 定义的接口。

方法§

方法 uncaught_handler§

method uncaught_handler() is rw

正在调度和运行的代码中未捕获的异常的处理程序的 RW 访问器。

方法 cue§

method cue(&codeInstant :$at:$in:$every:$times = 1:&catch --> Cancellation)

调度可调用对象 (&code) 以执行并返回实例化的 Cancellation 对象以取消代码的执行调度(如果您指定 :every ( time ) 命名参数,这一点尤其重要)。副词控制代码的运行时间和方式

  • $at 可以是 Instant,代码不会在该时间之前运行。或者,$in 是在运行代码之前要等待的秒数(可能是小数)。如果 $at 在过去或 $in 为负数,则延迟被视为零。实现可能会将 $in 的非常小的值(例如低于 0.001s)或 $at - now 的结果等同于零。

  • 如果指定了 $every,则将其解释为在重新执行代码之前要等待的秒数(可能是小数)。如果支持,实现可能会将过小的值视为最低分辨率,并可能在这种情况下发出警告;例如,将 0.0001 视为 0.001

  • $times 告诉调度程序运行代码的次数。

  • 如果 &code 终止,则使用 Exception 作为其唯一参数调用 &catch

  • 如果 $at$inInf,则永远不会运行 &code;如果 $everyInf,则 &code 将只运行一次。如果三个中的任何一个为 -Inf,则 &code 将立即运行。如果三个中的任何一个为 NaN,则会引发 X::Scheduler::CueInNaNSeconds 异常。这仅适用于 2019.05 及更高版本。

应该对返回的 Cancellation 对象调用 cancel 方法以取消代码的(可能重复的)提示。

方法 loads§

method loads()

这是一个方法存根,在子类化时应重新实现。

类型图§

Scheduler 的类型关系
raku-type-graph Scheduler Scheduler Mu Mu Any Any Any->Mu CurrentThreadScheduler CurrentThreadScheduler CurrentThreadScheduler->Scheduler CurrentThreadScheduler->Any ThreadPoolScheduler ThreadPoolScheduler ThreadPoolScheduler->Scheduler ThreadPoolScheduler->Any

展开上面的图表