Properti Workspace.SignalBehavior mengontrol apakah penangan acara dijalankan segera atau ditangguhkan. Opsi Enum.SignalBehavior.Deferred direkomendasikan yang membantu meningkatkan performa dan kebenaran mesin. Penangan acara untuk acara yang ditangguhkan dilanjutkan di titik pemulihan berikutnya, bersama dengan penangan acara yang baru dipicu.
Diagram berikut membandingkan perilaku acara Immediate dan perilaku acara Deferred.
- Dengan perilaku Immediate, jika suatu acara memicu acara lain, penangan acara kedua dijalankan segera.
- Dengan perilaku Deferred, acara kedua ditambahkan ke belakang antrian dan dijalankan kemudian.
Total waktu yang dihabiskan tidak berubah, tetapi urutannya berbeda.

"Re-entrancy" mencegah acara terus menerus memicu satu sama lain ketika mencapai kedalaman tertentu. Batas saat ini untuk ini adalah 10.
Manfaat acara yang ditangguhkan
Perilaku Immediate memiliki beberapa kekurangan. Untuk setiap instance yang ditambahkan ke permainan Anda, properti yang berubah, atau pemicu lain yang dipanggil, mesin perlu menjalankan kode Luau sebelum hal lainnya terjadi.
- Untuk mengubah 1.000 properti, 1.000 potongan kode berpotensi perlu dijalankan setelah setiap perubahan.
- Bug aneh yang sulit didiagnosis dapat terjadi, seperti acara penghapusan yang terpicu sebelum sesuatu ditambahkan.
- Sistem yang membutuhkan performa kritis dapat memicu acara yang mengharuskan mereka untuk menyerahkan kembali dan forth ke Luau.
- Penangan acara dapat membuat perubahan pada tempat atau memicu acara lain kapan saja acara dipicu.
- Sebuah acara dapat dipicu beberapa kali meskipun redundan, seperti properti yang berubah dua kali.
Dengan memiliki bagian spesifik dari siklus hidup mesin di mana Luau dapat dijalankan, mesin dapat memperoleh kinerja yang lebih baik dengan menggunakan sejumlah asumsi:
- Sistem yang membutuhkan performa kritis tidak perlu menyerahkan kembali ke Luau, yang mengarah pada peningkatan performa.
- Kecuali jika mesin itu sendiri mengubahnya, tempat tidak pernah berubah di luar titik pemulihan.
Titik pemulihan
Setelah ditangguhkan, penangan acara dilanjutkan di titik pemulihan berikutnya. Saat ini, kumpulan titik pemulihan mencakup:
- Proses input (dilanjutkan sekali per input yang akan diproses, lihat UserInputService)
- Penghentian skrip lama seperti wait(), spawn(), dan delay()
Pola kode yang umum dipengaruhi
Dengan acara jarak jauh, contoh berikut baik berhenti bekerja dengan benar atau memiliki perilaku yang sedikit berbeda; mereka bergantung pada acara yang dilanjutkan segera.
Memicu dan menangkap acara di tengah eksekusi
Dalam contoh ini, false selalu dikembalikan ketika acara yang ditangguhkan diaktifkan karena callback belum dijalankan. Untuk bekerja dengan benar, thread harus menunggu hingga setidaknya saat acara seharusnya dipicu.
local success = false
event:Connect(function ()
success = true
end)
doSomethingToTriggerEvent() -- Menyebabkan `event` untuk dipicu
return success
Mendengarkan untuk kejadian pertama dari suatu acara
connection = event:Connect(function ()
connection:Disconnect()
-- lakukan sesuatu
end)
Dengan acara yang ditangguhkan diaktifkan, beberapa pemanggilan penangan acara dapat mengantri sebelum Anda memutuskan acara. Memanggil Disconnect() membatalkan semua pemanggilan penangan acara yang tertunda—perilaku yang sama yang ada untuk acara segera.
Alternatifnya, gunakan Once() sebagai metode yang lebih nyaman untuk terhubung ke acara yang hanya Anda butuhkan untuk pemanggilan pertama.
Acara yang mengubah silsilah atau properti
Acara yang ditangguhkan menyebabkan acara yang menangani perubahan silsilah atau properti untuk dipicu setelah silsilah atau properti diubah:
local part = Instance.new("Part", workspace)
local function onPartDestroying()
print("Dalam sinyal:", part:GetFullName(), #part:GetChildren())
end
part.Destroying:Connect(onPartDestroying)
part:Destroy()
Karena Destroy() bekerja segera setelah skrip yang memanggilnya menyerahkan, instance sudah dihancurkan pada saat onPartDestroying() dipanggil. Untuk lebih banyak contoh, lihat Instance.Destroying.