Agendar código é útil em muitas situações, como garantir que o código seja executado após uma ação ou ciclo específico ter concluído ou atrasar o código por um período de tempo específico.Você pode usar a biblioteca para otimizar o agendador de tarefas do Roblox para gerenciar e agendar código.Você também pode usar uma biblioteca semelhante chamada coroutine para agendar código que tem alguma funcionalidade adicional.
Métodos comuns
Os seguintes são os métodos mais comuns task usados para agendar código.Você deve usar os métodos de tarefa sobre métodos de agendamento legados, como wait(), para garantir que seu código seja executado de forma ideal.
A tabela a seguir lista os métodos globais legados relevantes e seus equivalentes preferidos e mais otimizados:
| Métodos globais legados | Métodos de tarefa | Alternativas adicionais | | :-------------------------------------- | :------------------------------------------------- | :------------------------------------------------- | | wait() | task.wait() | RunService.Heartbeat | | wait(n) | Library.task.wait()\|task.wait(n) | | | spawn(f) | Library.task.defer()\|task.defer(f) | Library.task.delay()\|task.delay(0, f) | | delay(n, f) | Library.task.delay()\|task.delay(n, f) | | | spawn(function() f(uv1, ...) end) | Library.task.defer()\|task.defer(f, uv1, ...) | Library.task.delay()\|task.delay(0, f, uv1, ...) | | delay(n, function() f(uv1, ...) end) | Library.task.delay()\|task.delay(n, f, uv1, ...) |
task.gerar
task.spawn() toma um thread ou função e retoma-a imediatamente através do Agendadordo motor .Arguimentos adicionais são passados ao thread ou função que está sendo retomada.
O seguinte exemplo de código é um exemplo de como você pode usar task.spawn() quando chamar uma função que pode retornar durante a iteração sobre um conjunto de objetos:
local function playerAdded(player)
...
(yield)
end
for _, player in Players:GetPlayers() do
task.spawn(playerAdded, player)
end
task.defer
task.defer() toma um subprocesso ou função e adia-o até o próximo ciclo de retomada, momento em que é retomado com o Agendadordo motor.Arguimentos adicionais são passados ao subprocesso ou função de retomada.
Você deve usar isso normalmente quando quiser um comportamento semelhante a task.spawn(), mas não se importa com o subprocesso rodando imediatamente.O seguinte exemplo de código ilustra como a declaração print() para "A" adiará até que a declaração print() para "B" execute:
task.defer(print, "A")print("B")--> B--> A
task.delay
task.delay() toma um subprocesso ou função e o agenda para retomar após a quantidade de tempo dada expirar no próximo passo Heartbeat.O subprocesso retoma com o manuseio de erros integrado e suporte a outros recursos do motor.Quaisquer argumentos adicionais são passados ao subprocesso ou função de retomada.
Como o tempo de atraso real pode variar, o seguinte exemplo de código ilustra como você pode calcular ele passando o tempo atual como um argumento:
task.delay(2, function(scheduledTime)
print(os.clock() - scheduledTime) --> 2.038702
end, os.clock())
Uma duração de zero resultará na retomada do subprocesso ou função na próxima etapa.
task.wait
task.wait() produz o subprocesso atual até que a duração dada (em segundos) expire e então retome o subprocesso no próximo passo Heartbeat.
O tempo de produção real pode variar. O seguinte exemplo de código ilustra como este método o retorna por conveniência:
Como o tempo de atraso real pode variar, o seguinte exemplo de código ilustra como você pode obter o tempo real armazenando o valor de retorno do método:
local elapsedTime = task.wait(2) -- espere por 2 segundosprint(elapsedTime) --> 2.0792941
Se nenhuma duração for dada, a duração padrão será zero, o que significa que o thread será automaticamente retomado no próximo passo.Isso significa que task.wait() é equivalente em comportamento a RunService.Heartbeat.