Skip to content

Task

任务调度服务,提供任务的立即执行、延迟执行、等待与取消等能力。通过 editor:GetService 获取。

Overview

Task 服务承担协程任务调度职责,可让业务逻辑以立即执行、延后执行或延时执行的方式编排,并为每个被调度的任务返回协程句柄以供取消。Wait 提供协程内的挂起等待能力,从而支持在任务内部控制节奏、等一段时间后再继续。

Get by:

lua
-- @runtime client
local service = editor:GetService("Task")

Public API

Spawn

创建一个新任务,并立即开始执行指定的函数。

参数

参数类型说明
funcFunction要执行的任务函数

返回值

类型说明
thread新任务句柄,可传给 Cancel 取消任务

立即启动协程任务

lua
-- @runtime client
local Task = editor:GetService('Task')
local coro = Task:Spawn(function()
    print('任务执行中')
end)
-- 标准库 coroutine 用点语法查询状态
print('协程状态:', coroutine.status(coro))

Defer

创建一个新任务,并在当前帧结束后的下一帧执行指定函数。

参数

参数类型说明
funcFunction要执行的任务函数

返回值

类型说明
thread新任务句柄,可传给 Cancel 取消任务

延迟到当前帧末执行

lua
-- @runtime client
local Task = editor:GetService('Task')
local coro = Task:Defer(function()
    print('延迟任务执行')
end)
print('协程状态:', coroutine.status(coro))

Cancel

取消一个已创建但尚未开始执行的任务。任务正在执行或已执行完毕时无法取消,此时返回 false。

参数

参数类型说明
corothread待取消的任务句柄

返回值

类型说明
Bool是否成功取消;任务已执行完或正在执行中返回 false

取消 Spawn 创建的协程

lua
-- @runtime client
local Task = editor:GetService('Task')
local coro = Task:Spawn(function()
    Task:Wait(10.0)  -- 长时间等待,便于取消
end)
local cancelled = Task:Cancel(coro)
print('取消结果:', cancelled)
print('协程状态:', coroutine.status(coro))

Delay

创建一个新任务,在指定的等待时长之后执行指定的函数。

参数

参数类型说明
durationFloat延迟时间(秒)
funcFunction要执行的任务函数

返回值

类型说明
thread新任务句柄,可传给 Cancel 取消任务

延迟执行并在需要时取消

lua
-- @runtime client
local Task = editor:GetService('Task')
-- Delay 返回 Thread,可像 Spawn/Defer 的结果一样传给 Cancel
local delayThread = Task:Delay(2.0, function()
    print('2 秒后执行')
end)
local cancelled = Task:Cancel(delayThread)
print('取消结果:', cancelled)

Wait

挂起当前任务,等待指定的时长后继续执行,并返回实际等待的秒数。

参数

参数类型说明
durationFloat等待时长(秒)

返回值

类型说明
Float实际等待的时长(秒)

在协程内暂停当前协程

lua
-- @runtime client
local Task = editor:GetService('Task')
Task:Spawn(function()
    print('开始等待')
    Task:Wait(1.0)  -- 只能在协程内调用
    print('1 秒后继续')
end)