task

显示已弃用

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

任务图书馆允许函数和线程被排程在任务调度器。

在此库中提供的函数通常支持函数和线程。在大多数情况下,使用函数是足够的,但对于更高级的情况,建议您熟悉 coroutine 库。

概要

职能

  • spawn(functionOrThread : function | coroutine,... : Variant):coroutine

    调用/暂停一个函数/程序即时通过引擎计任务计划程序。

  • defer(functionOrThread : function | coroutine,... : Variant):coroutine

    在当前恢复周期结束时调用/重新调用一个函数/程序。

  • delay(duration : number,functionOrThread : function | coroutine,... : Variant):coroutine

    程序/routine 将在指定的时间(秒)过后调用/重新调用,不会被限制。

  • 导致以下代码并行运行。

  • 导致以下代码并行运行。

  • wait(duration : number):number

    在指定的持续时间(在秒内)到达下一次心跳后,将当前线程作为输出提供给下一个 Heartbeat,无需限制。

  • cancel(thread : coroutine):void

    取消线程,防止它被重新开始。

职能

接受一个函数或线程(由 coroutine.创建 or 创作建),并立即通过引擎的程序调度器调用/重新调用它。第一个参数发送到函数/线程。

此函数基于快速生成模式,而不是作为 deprecated global spawn 函数的替换。建议您使用此函数,而不是快速生成。

如果调用脚本当前在串行执行阶段运行,那么生成的函数或线程将在当前串行执行阶段继续运行。如果调用脚本当前在并行执行阶段运行,那么生成的函数或线程将在当前并行执行阶段继续运行。有关更多信息,请参阅并行 Luau

参数

functionOrThread: function | coroutine

由 coroutine.创建 or 创作建返回的函数或线程。

...: Variant

向函数或线程发送参数。

返回

计划的线程。

接受一个函数或线程(由 coroutine.创建 or 创作建返回),并将其推迟到当前恢复周期结束时,在此时它将使用引擎的调度器与 task.spawn() 一样重新启动。参数后的参数后的参数后的参数后的参数后的参数后的参数后的参数后的参数后的参数后的参数后的参数后的参数后的参数后的参数后的参数后的参数后的参数后的参数后的参数后的参数

此函数应该用于当需要类似行为task.spawn(),但线程不需要立即运重生点。

如果调用脚本当前在串行执行阶段运行,那么调用函数或线程将在串行执行阶段继续运行。如果调用脚本当前在并行执行阶段运行,那么调用函数或线程将在并行执行阶段继续运行。有关更多信息,请参阅Parallel Luau

参数

functionOrThread: function | coroutine

由 coroutine.创建 or 创作建返回的函数或线程。

...: Variant

向函数或线程发送参数。

返回

计划的线程。

接受一个函数或线程(由 coroutine.创建 or 创作建返回),并将它安排在下一个 Heartbeat 后的时间表上调用/重新调用。参数在第二后发送给函数/线程。

此函数与在该 delay 函数中使用的 deprecated global 函数不同:在相同的心跳步骤中,足够的时间过去后,该函数保证会被调用/重新调用。提供一个持续时间为零 (0) 将确保该函数在下一个心跳中被调用。

您可以通过调用 os.clock() 在计划和预定函数上计算实际时间。

如果调用脚本当前在串行执行阶段运行,那么延迟函数或线程在串行执行阶段会被重新启用。如果调用脚本当前在并行执行阶段运行,那么延迟函数或线程在并行执行阶段会被重新启用。有关更多信息,请参阅Parallel Luau

参数

duration: number

函数/线程必须调用/恢复之前的最小时数。

functionOrThread: function | coroutine
...: Variant

在函数/线程到期时传递给该函数/线程的参数。

返回

计划的线程。

desynchronize

void

如果调用脚本当前在串行执行阶段运行,desynchronize 暂停脚本,并在下一个并行执行阶段继续。如果调用脚本当前在并行执行阶段运行,desynchronize 立即返回,并且没有效果。

只有 Actor 的子脚本才能调用此方法。如果 Actor 外的脚本调用此方法,将会发生错误。ModuleScript 还可以调用 desynchronize ,只要 Actor 的子脚本必须由脚本 A 调用它。

了解更多信息,请参阅Parallel Luau

返回

void

synchronize

void

如果调用脚本当前在并行执行阶段运行,synchronize 暂停脚本,并在下一阶段的串行执行阶段中恢复。如果调用脚本当前在串行执行阶段运行,synchronize 立即返回,并且没有效果。

只有 Actor 的子脚本才能调用此方法。如果 Actor 外的脚本调用此方法,将会发生错误。ModuleScript 还可以调用 synchronize ,只要 Actor 的子脚本调用它被要求的时候。

了解更多信息,请参阅Parallel Luau

返回

void

wait

在指定的时间 (在秒) 到期后,将当前线程结束,然后在下一个 Heartbeat 步骤继续线程。实际的时间到期时间返回。

如果没有指定时间,它将默认为零 (0)。这意味着在下一个步骤上,该线程将恢复正常,这与行为上的RunService.Heartbeat:Wait()相同。

与使用过时的全球 wait 不同,此函数 不会限制 并且保证第一个 Heartbeat 在由它由来的时间恢复。此函数还只返回过时时间,并且还返回其他任何东西。

如果调用脚本当前在串行执行阶段运行,那么脚本在串行执行阶段会重新运行。如果调用脚本当前在并行执行阶段运行,那么脚本在并行执行阶段会重新运行。有关更多信息,请参阅Parallel Luau

参数

duration: number

在当前线程恢复之前,该线程的剩余时间(秒)。

默认值:0

返回

cancel

void

取消线程并关闭它,以防止手动或任务调任务计划程序重新启动它。

这个函数可以与其他任务库成员使用,该返回线程取消它们之前。例如:


local thread = task.delay(5, function()
print("Hello world!")
end)
task.cancel(thread)

注意:线程可能处于无法取消的状态。例如,正在执行的线程和重新启动的线程可能不能取消。如果这是情况,将生成一个 lua 错误。

但是,代码不应该依赖特定线程状态或条件导致 task.cancel() 失败。 可能有未来的更新将消除这些限制,允许在这些状态下的线程成功取消。

参数

thread: coroutine

将被取消的线程。

返回

void