Lập lịch mã

*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.

Lập lịch mã rất hữu ích trong nhiều tình huống, chẳng hạn như đảm bảo mã được thực thi sau khi một hành động hoặc chu trình cụ thể đã hoàn thành, hoặc trì hoãn mã trong một khoảng thời gian nhất định. Bạn có thể sử dụng thư viện task để tối ưu hóa trình lập lịch tác vụ của Roblox nhằm quản lý và lập lịch mã. Bạn cũng có thể sử dụng một thư viện tương tự gọi là coroutine để lập lịch mã có một số chức năng bổ sung.

Các phương pháp phổ biến

Dưới đây là những phương pháp task phổ biến nhất được sử dụng để lập lịch mã. Bạn nên sử dụng các phương pháp tác vụ thay cho các phương pháp lập lịch cũ, chẳng hạn như wait(), để đảm bảo mã của bạn chạy tối ưu.

Bảng sau liệt kê các phương pháp toàn cục cũ có liên quan và các đối thủ, tối ưu hơn mà ưa chuộng hơn:

Các phương pháp toàn cục cũCác phương pháp tác vụCác lựa chọn thay thế bổ sung
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() nhận một luồng hoặc hàm và tiếp tục thực thi nó ngay lập tức thông qua trình lập lịch của engine. Các tham số bổ sung được truyền vào luồng hoặc hàm đang được tiếp tục.

Mẫu mã sau là một ví dụ về cách bạn có thể sử dụng task.spawn() khi gọi một hàm có thể tạm dừng trong khi lặp qua một tập hợp các đối tượng:


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

task.defer()

task.defer() nhận một luồng hoặc hàm và hoãn lại cho đến cuối điểm tiếp tục hiện tại trong khung hình hiện tại. Các tham số bổ sung được truyền vào luồng hoặc hàm tiếp tục.

Bạn thường nên sử dụng điều này khi bạn muốn hành vi tương tự như task.spawn() nhưng không quan tâm đến việc luồng chạy ngay lập tức. Mẫu mã sau minh họa cách mà câu lệnh print() cho "A" sẽ bị hoãn đến sau khi câu lệnh print() cho "B" thực thi:


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

task.delay()

task.delay() nhận một luồng hoặc hàm và lập lịch để nó tiếp tục sau khi một khoảng thời gian nhất định trôi qua trong bước tiếp theo của Heartbeat. Luồng tiếp tục với xử lý lỗi tích hợp và hỗ trợ cho các tính năng khác của engine. Bất kỳ tham số bổ sung nào sẽ được truyền vào luồng hoặc hàm tiếp tục.

Vì thời gian trì hoãn thực tế có thể dao động, mẫu mã sau minh họa cách bạn có thể tính toán nó bằng cách truyền thời gian hiện tại như một tham số:


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

Một khoảng thời gian bằng không sẽ dẫn đến việc luồng hoặc hàm tiếp tục ở bước tiếp theo.

task.wait()

task.wait() tạm dừng luồng hiện tại cho đến khi khoảng thời gian nhất định (tính bằng giây) trôi qua và sau đó tiếp tục luồng đó ở bước tiếp theo của Heartbeat.

Thời gian tạm dừng thực tế có thể dao động. Mẫu mã sau minh họa cách phương pháp này trả về nó cho sự tiện lợi:

Vì thời gian trì hoãn thực tế có thể dao động, mẫu mã sau minh họa cách bạn có thể lấy thời gian thực tế bằng cách lưu trữ giá trị trả về của phương pháp:


local elapsedTime = task.wait(2) -- Chờ trong 2 giây
print(elapsedTime) --> 2.0792941

Nếu không có khoảng thời gian nào được cung cấp, khoảng thời gian sẽ mặc định là bằng không có nghĩa là luồng sẽ tự động tiếp tục ở bước tiếp theo. Điều này có nghĩa là task.wait() tương đương về hành vi với RunService.Heartbeat.

©2026 Roblox Corporation. Roblox, logo Roblox và Powering Imagination là các nhãn hiệu đã đăng ký và chưa đăng ký của chúng tôi tại Hoa Kỳ và các quốc gia khác.