Codice di pianificazione

*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.

Pianificare il codice è utile in molte situazioni, come garantire che il codice venga eseguito dopo che un'azione specifica o un ciclo è stato completato, o ritardare il codice per una durata specifica. Puoi utilizzare la libreria task per ottimizzare il task scheduler di Roblox per gestire e pianificare il codice. Puoi anche utilizzare una libreria simile chiamata coroutine per pianificare il codice che ha alcune funzionalità aggiuntive.

Metodi comuni

I seguenti sono i metodi task più comuni utilizzati per pianificare il codice. Dovresti usare i metodi di task rispetto ai metodi di pianificazione legacy, come wait(), per garantire che il tuo codice venga eseguito in modo ottimale.

La seguente tabella elenca i metodi globali legacy pertinenti e le loro controparti preferite e più ottimizzate:

Metodi globali legacyMetodi di taskAlternativa aggiuntiva
wait()task.wait()RunService.Heartbeat
wait(n)task.wait(n)
spawn(f)task.defer(f)task.delay(0, f)
delay(n, f)task.delay(n, f)
spawn(function() f(uv1, ...) end)task.defer(f, uv1, ...)task.delay(0, f, uv1, ...)
delay(n, function() f(uv1, ...) end)task.delay(n, f, uv1, ...)

task.spawn()

task.spawn() prende un thread o una funzione e lo riprende immediatamente attraverso il scheduler del motore. Gli argomenti aggiuntivi vengono passati al thread o alla funzione che viene ripresa.

Il seguente esempio di codice è un esempio di come puoi utilizzare task.spawn() quando chiami una funzione che può yield mentre itera su un insieme di oggetti:


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

task.defer()

task.defer() prende un thread o una funzione e lo rinvia fino alla fine del punto di ripresa corrente all'interno del frame attuale. Gli argomenti aggiuntivi vengono passati al thread o alla funzione che viene ripresa.

Dovresti utilizzare questo metodo quando desideri un comportamento simile a task.spawn() ma non ti interessa che il thread venga eseguito immediatamente. Il seguente esempio di codice illustra come la dichiarazione print() per "A" verrà rinviata fino a dopo l'esecuzione della dichiarazione print() per "B":


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

task.delay()

task.delay() prende un thread o una funzione e lo programma per la ripresa dopo che è trascorso il tempo dato nel prossimo passo di Heartbeat. Il thread riprende con gestione degli errori integrata e supporto per altre funzionalità del motore. Qualsiasi argomento aggiuntivo viene passato al thread o alla funzione che viene ripresa.

Poiché il tempo di attesa effettivo può variare, il seguente esempio di codice illustra come puoi calcolarlo passando il tempo corrente come argomento:


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

Una durata di zero comporterà che il thread o la funzione riprendano nel passo successivo.

task.wait()

task.wait() interrompe il thread corrente fino a quando la durata data (in secondi) non è trascorsa e poi riprende il thread nel prossimo passo di Heartbeat.

Il tempo di yield effettivo può variare. Il seguente esempio di codice illustra come questo metodo restituisce il valore per comodità:

Poiché il tempo di attesa effettivo può variare, il seguente esempio di codice illustra come puoi ottenere il tempo effettivo memorizzando il valore di ritorno del metodo:


local elapsedTime = task.wait(2) -- Aspetta 2 secondi
print(elapsedTime) --> 2.0792941

Se non viene fornita alcuna durata, la durata predefinita sarà zero, il che significa che il thread riprenderà automaticamente nel passo successivo. Questo significa che task.wait() è equivalente nel comportamento a RunService.Heartbeat.

© 2026 Roblox Corporation. Roblox, il logo Roblox e Powering Imagination sono tra i nostri marchi registrati e non registrati negli Stati Uniti. e altri paesi.