任务 库允许函数和线程与引擎的调度程任务计划程序进行调度。
本库中可用的函数一般支持函数和线程。在大多数情况下,使用函数即可足够,但对于更高级的情况,建议您熟悉 coroutine 图书馆。
概要
职能
立即通过引擎的调度任务计划程序调用/恢复函数/协程。
在当前恢复周期结束时调用/重新启动功能/协程。
将函数/协程安排在指定时间(秒)后的下一个心跳中调用/恢复,而不需要限制速度。
导致以下代码并行运行。
导致以下代码在串行中运行。
在没有限制的情况下产生当前线程。
取消线程,防止它被恢复。
职能
spawn
接受一个函数或线程(由 coroutine.create() 返回)并立即通过引擎的调度程序调用/恢复它。在第一个之后的参数发送到函数/线程。
如果调用脚本正在运行在串行执行阶段,那么生成的函数或线程在当前串行执行阶段被恢复。如果调用脚本正在并行执行阶段运行,那么生成的函数或线程在当前并行执行阶段继续运行。了解更多信息,请参阅并行 Luau。
参数
由 coroutine.create() 返回的函数或线程。
发送到函数或线程的参数。
返回
预定的线程。
defer
接受一个函数或线程(由 coroutine.create() 返回),并将其推迟到当前框架中的现有恢复点的结束。
当需要类似于 task.spawn() 的行为时,应使用此函数,但线程不需要立即运行。
如果调用脚本正在运行在串行执行阶段,那么延迟的函数或线程在串行执行阶段被恢复。如果调用脚本正在并行执行阶段运行,那么延迟的函数或线程在并行执行阶段恢复。了解更多信息,请参阅并行 Luau。
返回
预定的线程。
delay
接受一个函数或线程(由 返回)并将其安排在指定的时间秒后调用/恢复。第二个以后的参数发送到函数/线程。
该函数与过时的全球 函数不同,在 没有限制发生 : 在足够的时间过去的同一步骤中,该函数保证被调用/重新启动。提供零持续时间( 0 )将保证函数在下一个 Heartbeat 上被调用。
您可以通过调用 os.clock() 在计划和预定函数中计算实际时间。
如果调用脚本正在运行在串行执行阶段,那么延迟的函数或线程在串行执行阶段恢复。如果调用脚本正在并行执行阶段运行,那么延迟的函数或线程在并行执行阶段恢复。了解更多信息,请参阅并行 Luau。
参数
返回
预定的线程。
desynchronize
如果调用脚本正在运行在串行执行阶段,desynchronize() 暂停脚本,脚本将在下一阶段并行执行时恢复。如果调用脚本正在并行执行阶段运行,desynchronize() 立即返回且没有效果。
只有由 Actor 下裔的脚本才能调用此方法。如果脚本在 Actor 之外调用此方法,将会发生错误。ModuleScripts 也可以调用 desynchronize() ,只要调用模块的实例化被 Actor 的子脚本需要,就可以调用它。
了解更多信息,请参阅并行 Luau。
返回
synchronize
如果调用脚本正在并行执行阶段运行,synchronize() 将暂停脚本,脚本将在下一阶段的串行执行阶段恢复。如果调用脚本当前正在串行执行阶段运行,synchronize() 立即返回且没有效果。
只有由 Actor 下裔的脚本才能调用此方法。如果脚本在 Actor 之外调用此方法,将会发生错误。ModuleScripts 也可以调用 synchronize() ,只要调用模块的实例化被 Actor 的子脚本需要,就可以调用它。
了解更多信息,请参阅并行 Luau。
返回
wait
在指定的时间(秒)过后,将当前线程产生到最后,然后在下一步的 Heartbeat 步中恢复线程。实际经过的时间数返回。
如果没有提供时间长度,它将默认为零(0)。这意味着线程在下一步继续运行,这在行为上相当于 Class.RunService.Heartbeat:Wait()
与过时的全球 wait() 不同,此函数 不会限制 并且在到期时保证在第一个心跳中恢复线程。此函数还只返回过期时间和无关的其他内容。
如果调用脚本正在运行在串行执行阶段,那么脚本在串行执行阶段继续运行。如果调用脚本正在并行执行阶段运行,那么脚本在并行执行阶段继续运行。了解更多信息,请参阅并行 Luau。
参数
在当前线程重新启动前应过期的秒数数量。
返回
cancel
取消线程并关闭它,防止它被手动或由引擎的调度程序重新启动。
这个函数可以与其他成员的 任务 库结合,返回线程以取消它们,在它们被恢复之前。例如:
local thread = task.delay(5, function()
print("Hello world!")
end)
task.cancel(thread)
请注意,线程可能处于一个无法取消的状态。例如,正在执行的线程和已恢复另一个协程的线程可能无法取消。如果这是情况,将生成一个错误。然而,代码不应依赖特定线程状态或条件导致 task.cancel() 失败。可能是未来的更新将消除这些限制,允许这些状态的线程成功取消。
参数
将被取消的线程。