【Studio】任务库 - 现已推出!

开发者们,大家好!

我们刚刚启用了一个全新的库,可以运用到你们的项目中。任务库可让你直接与引擎的任务计划程序交流来管理并计划代码。它包含了数个算法,以及对一些现有算法的改进。

详情

task.spawn

接受一个线程或函数,并立即通过引擎的计划程序继续任务。额外的参数将传递给继续的线程或函数。

void task.spawn(function | thread, ...args)

这在调用可能在迭代一组对象时暂停的函数时非常有用:

local function playerAdded(player)
    ...
    (yield)
end

for _, player in ipairs(Players:GetPlayers()) do
    task.spawn(playerAdded, player)
end

task.spawn 是基于 fastSpawn 模式,而不是作为 spawn 186 的替代品。我们建议你在应该使用 fastSpawn 场合使用此算法。

task.defer

接受一个线程或函数并推迟它直到 resumption cycle 244,然后用引擎的计划程序继续。额外的参数将传递给继续的线程或函数。

void task.defer(function | thread, ...args)

当你想获得类似 task.spawn 的行为,但不在乎线程立即运行的时候使用它。

task.defer(print, "A")
print("B")
--> B
--> A

task.defer 是 spawn 186 的改进版,它计划一个线程尽快继续(担不是立即继续)而不进行任何限流。

task.delay

接受一个线程或函数并计划它在指定时间后的下一个 Heartbeat 69 步继续。进程以内置的错误处理程序继续,并支持其他引擎功能。额外的参数将传递给继续的线程或函数。

void task.delay(duration, function | thread, ...args)

实际的延迟时间会有变化,可以通过传递当前时间作为参数来计算得出。

task.delay(2, function (scheduledTime)
    print(os.clock() - scheduledTime) --> 2.038702
end, os.clock())

时长为零时会使线程或函数在下一步时继续。

task.delay 是 delay 21的改进版,它计划一个线程在一定时间后继续而不进行任何限流。

task.wait

暂停当前线程,直到经过指定时间(以秒计算),然后在下一个 Heartbeat 69步时继续线程。

elapsed task.wait(duration=0)

实际暂停时间会有变化,出于方便此算法会返回实际暂停时间。

local elapsedTime = task.wait(2) -- wait for 2 seconds
print(elapsedTime) --> 2.0792941

如果不指定时长则默认为零,也就是说线程会在下一步自动继续。

task.wait()
-- 行为与 RunService.Heartbeat:Wait() 一致
RunService.Heartbeat:Wait()

task.wait 是 wait 109的改进版,它它计划一个线程在一定时间后继续而不进行任何限流。

现有算法

我们最终会将现有算法(spawn,delay 和 wait)标为已弃用,但将来它们仍会继续生效,我们也没有改变的计划。

5 个赞

这个好呀!!!性能会更好

关于我们    加入我们    条款    隐私政策
©2021 Roblox Corporation、Roblox、Roblox 标志及 Powering Imagination 是我们在美国及其他国家或地区的注册与未注册商标。
粤ICP备20013629号