Thuộc tính Workspace.SignalBehavior điều khiển việc liệu các trình xử lý sự kiện có được kích hoạt ngay lập tức hay bị hoãn lại. Tùy chọn Enum.SignalBehavior.Deferred được khuyến nghị vì nó giúp cải thiện hiệu suất và độ chính xác của động cơ. Các trình xử lý sự kiện cho các sự kiện bị hoãn lại được tiếp tục tại điểm tiếp tục tiếp theo, cùng với bất kỳ trình xử lý sự kiện nào mới được kích hoạt.
Sơ đồ sau so sánh hành vi sự kiện Immediate và hành vi sự kiện Deferred.
- Với hành vi Immediate, nếu một sự kiện kích hoạt một sự kiện khác, thì trình xử lý sự kiện thứ hai sẽ được kích hoạt ngay lập tức.
- Với hành vi Deferred, sự kiện thứ hai được thêm vào cuối hàng đợi và được thực hiện sau.
Thời gian tổng cộng không thay đổi, nhưng thứ tự khác nhau.

"Sự tái nhập" ngăn chặn các sự kiện kích hoạt lẫn nhau liên tục khi chúng đạt đến một độ sâu nhất định. Giới hạn hiện tại cho điều này là 10.
Lợi ích của sự kiện bị hoãn lại
Hành vi Immediate có một số nhược điểm. Đối với mỗi thể hiện được thêm vào trò chơi của bạn, thuộc tính thay đổi, hoặc một số kích hoạt khác được thực hiện, động cơ cần phải chạy mã Luau trước khi bất kỳ điều gì khác xảy ra.
- Để thay đổi 1,000 thuộc tính, có thể cần thực hiện 1,000 đoạn mã sau mỗi thay đổi.
- Có thể xảy ra các lỗi lạ, khó chẩn đoán, chẳng hạn như một sự kiện xóa được kích hoạt trước khi một cái gì đó thậm chí đã được thêm vào.
- Các hệ thống quan trọng về hiệu suất có thể kích hoạt các sự kiện yêu cầu chúng phải nhường lại liên tục cho Luau.
- Các trình xử lý sự kiện có thể thực hiện thay đổi cho địa điểm hoặc kích hoạt các sự kiện khác bất cứ khi nào một sự kiện được kích hoạt.
- Một sự kiện có thể được kích hoạt nhiều lần mặc dù đã lặp lại, chẳng hạn như một thuộc tính thay đổi hai lần.
Bằng cách có các phần cụ thể của vòng đời động cơ trong đó Luau có thể chạy, động cơ có thể đạt được hiệu suất cải thiện bằng cách sử dụng nhiều giả định:
- Các hệ thống quan trọng về hiệu suất không cần phải nhường chỗ cho Luau, điều này dẫn đến lợi ích về hiệu suất.
- Trừ khi động cơ tự thay đổi nó, nơi không bao giờ thay đổi ngoài một điểm tiếp tục.
Các điểm tiếp tục
Sau khi bị hoãn lại, một trình xử lý sự kiện được tiếp tục tại điểm tiếp tục tiếp theo. Hiện tại, tập hợp các điểm tiếp tục bao gồm:
- Xử lý đầu vào (tiếp tục một lần cho mỗi đầu vào cần xử lý, xem UserInputService)
- Xử lý kịch bản chờ kế thừa như wait(), spawn(), và delay()
Các mẫu mã thường bị ảnh hưởng
Với các sự kiện từ xa, các ví dụ sau đây hoặc dừng hoạt động chính xác hoặc có hành vi khác biệt một cách tinh tế; chúng phụ thuộc vào việc các sự kiện được tiếp tục ngay lập tức.
Kích hoạt và bắt sự kiện giữa quá trình thực thi
Trong ví dụ này, false luôn được trả về khi các sự kiện bị hoãn lại được kích hoạt vì callback vẫn chưa chạy. Để hoạt động chính xác, luồng phải nhường lại cho đến ít nhất khi sự kiện sẽ được kích hoạt.
local success = false
event:Connect(function ()
success = true
end)
doSomethingToTriggerEvent() -- Gây ra sự kiện được kích hoạt
return success
Lắng nghe lần xuất hiện đầu tiên của một sự kiện
connection = event:Connect(function ()
connection:Disconnect()
-- làm điều gì đó
end)
Với các sự kiện bị hoãn lại được kích hoạt, nhiều lần gọi trình xử lý sự kiện có thể bị xếp hàng trước khi bạn ngắt kết nối khỏi sự kiện. Gọi Disconnect() sẽ xóa tất cả các cuộc gọi trình xử lý sự kiện đang chờ—hành vi tương tự tồn tại cho các sự kiện ngay lập tức.
Ngoài ra, sử dụng Once() như một phương pháp tiện lợi hơn để kết nối với một sự kiện mà bạn chỉ cần lần gọi đầu tiên của nó.
Các sự kiện thay đổi tổ tiên hoặc thuộc tính
Các sự kiện bị hoãn lại gây ra các sự kiện xử lý thay đổi tổ tiên hoặc thuộc tính sẽ được kích hoạt sau khi tổ tiên hoặc thuộc tính đã được thay đổi:
local part = Instance.new("Part", workspace)
local function onPartDestroying()
print("Trong tín hiệu:", part:GetFullName(), #part:GetChildren())
end
part.Destroying:Connect(onPartDestroying)
part:Destroy()
Bởi vì Destroy() hoạt động ngay lập tức khi kịch bản gọi nó nhường lại, thể hiện đã bị tiêu diệt trước khi onPartDestroying() được gọi. Để biết thêm ví dụ, xem Instance.Destroying.