Menjadwalkan kode berguna dalam banyak situasi, seperti memastikan kode dieksekusi setelah tindakan atau siklus tertentu selesai, atau menunda kode untuk jangka waktu tertentu. Anda dapat menggunakan pustaka task untuk mengoptimalkan penjadwal tugas Roblox untuk mengelola dan menjadwalkan kode. Anda juga dapat menggunakan pustaka serupa yang disebut coroutine untuk menjadwalkan kode yang memiliki beberapa fungsi tambahan.
Metode umum
Berikut adalah metode task yang paling umum digunakan untuk menjadwalkan kode. Anda seharusnya menggunakan metode tugas daripada metode penjadwalan lama, seperti wait(), untuk memastikan bahwa kode Anda berjalan secara optimal.
Tabel berikut mencantumkan metode global lama yang relevan dan padanan mereka yang lebih dioptimalkan:
| Metode global lama | Metode tugas | Alternatif tambahan |
|---|---|---|
| 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() mengambil thread atau fungsi dan melanjutkannya segera melalui penjadwal mesin. Argumen tambahan diteruskan ke thread atau fungsi yang dilanjutkan.
Contoh kode berikut adalah contoh cara Anda dapat menggunakan task.spawn() saat memanggil fungsi yang mungkin menunggu saat iterasi melalui sekumpulan objek:
local function playerAdded(player)
print(player)
end
for _, player in Players:GetPlayers() do
task.spawn(playerAdded, player)
end
task.defer()
task.defer() mengambil thread atau fungsi dan menundanya hingga akhir titik kelanjutan saat ini dalam kerangka waktu saat ini. Argumen tambahan diteruskan ke thread atau fungsi yang dilanjutkan.
Anda sebaiknya menggunakan ini ketika Anda ingin perilaku yang mirip dengan task.spawn() tetapi tidak peduli tentang thread yang berjalan segera. Contoh kode berikut menggambarkan bagaimana pernyataan print() untuk "A" akan ditunda hingga setelah pernyataan print() untuk "B" dieksekusi:
task.defer(print, "A")print("B")--> B--> A
task.delay()
task.delay() mengambil thread atau fungsi dan menjadwalkannya untuk dilanjutkan setelah jumlah waktu yang diberikan berlalu pada langkah Heartbeat berikutnya. Thread dilanjutkan dengan penanganan kesalahan bawaan dan dukungan untuk fitur mesin lainnya. Argumen tambahan diteruskan ke thread atau fungsi yang dilanjutkan.
Karena waktu penundaan yang sebenarnya dapat bervariasi, contoh kode berikut menggambarkan bagaimana Anda dapat menghitungnya dengan meneruskan waktu saat ini sebagai argumen:
task.delay(2, function(scheduledTime)
print(os.clock() - scheduledTime) --> 2.038702
end, os.clock())
Durasi nol akan menghasilkan thread atau fungsi dilanjutkan pada langkah berikutnya.
task.wait()
task.wait() menunggu thread saat ini hingga durasi yang diberikan (dalam detik) berlalu dan kemudian melanjutkan thread pada langkah Heartbeat berikutnya.
Waktu penundaan yang sebenarnya dapat bervariasi. Contoh kode berikut menggambarkan bagaimana metode ini mengembalikannya untuk kenyamanan:
Karena waktu penundaan yang sebenarnya dapat bervariasi, contoh kode berikut menggambarkan bagaimana Anda dapat mendapatkan waktu yang sebenarnya dengan menyimpan nilai pengembalian metode:
local elapsedTime = task.wait(2) -- Tunggu selama 2 detikprint(elapsedTime) --> 2.0792941
Jika tidak ada durasi yang diberikan, durasi akan secara default menjadi nol yang berarti thread akan otomatis dilanjutkan pada langkah berikutnya. Ini berarti task.wait() setara dalam perilaku dengan RunService.Heartbeat.