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ịch trình mã hữu ích trong nhiều tình huống, chẳng hạn như đảm bảo mã được thực hiện sau khi hoàn thành một hành động hoặc chu kỳ cụ thể, hoặc trì hoãn mã trong một thời gian cụ thể.Bạn có thể sử dụng thư viện task để tối ưu hóa trình lập lịch nhiệm vụ của Roblox để quản lý và lên lịch mã.Bạn cũng có thể sử dụng một thư viện tương tự có tên là coroutine để lên lịch mã có một số chức năng bổ sung.

Phương pháp phổ biến

Các phương pháp sau đây là phổ biến nhất task được sử dụng để lên lịch mã.Bạn nên sử dụng các phương pháp nhiệm vụ hơn các phương pháp lên lịch di sản, chẳng hạn như wait(), để đảm bảo rằng mã của bạn chạy tối ưu.

Bảng sau đây liệt kê các phương pháp toàn cầu di sản liên quan và các phiên bản thay thế ưa thích, được tối ưu hóa hơn:

| Phương pháp toàn cầu cũ | Phương pháp nhiệm vụ | Phương pháp thêm | | :-------------------------------------- | :------------------------------------------------- | :------------------------------------------------- | | wait() | task.wait() | RunService.Heartbeat | | wait(n) | Library.task.wait()\|task.wait(n) | | | spawn(f) | Library.task.defer()\|task.defer(f) | Library.task.delay()\|task.delay(0, f) | | delay(n, f) | Library.task.delay()\|task.delay(n, f) | | | spawn(function() f(uv1, ...) end) | Library.task.defer()\|task.defer(f, uv1, ...) | Library.task.delay()\|task.delay(0, f, uv1, ...) | | delay(n, function() f(uv1, ...) end) | Library.task.delay()\|task.delay(n, f, uv1, ...) | |

tác vụ.spawn

lấy một tiền thề hoặc chức năng và tiếp tục nó ngay lập tức thông qua lịch trình của động cơ.Các tham số bổ sung được chuyển đến luồng hoặc chức năng đang được tiếp tục.

Ví dụ mã sau đây là một ví dụ về cách bạn có thể sử dụng task.spawn() khi gọi một chức năng có thể cho ra khi lặp qua một bộ các đối tượng:


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

nhiệm vụ.defer

task.defer() lấy một tiền thề hoặc chức năng và hoãn nó cho đến chu kỳ tiếp tục lại tiếp theo tại điểm đó nó được khôi phục với lịch trình của động cơ.Các tham số bổ sung được chuyển cho tiến trình hoặc chức năng tiếp tục.

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


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

nhiệm vụ.延迟

task.delay() lấy một tiền thớt hoặc chức năng và lên lịch cho nó được tiếp tục sau một khoảng thời gian nhất định trên bước tiếp theo Heartbeat .Chủ đề tiếp tục với xử lý lỗi tích hợp và hỗ trợ các tính năng khác của động cơ.Bất kỳ các tham số bổ sung nào cũng được truyền cho tiến trình hoặc chức năng tiếp tục.

Vì thời gian trễ thực tế có thể khác nhau, mẫu mã sau đây 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 làm tham số:


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

Một thời gian bằng không sẽ khiến luồng hoặc chức năng tiếp tục vào bước tiếp theo.

nhiệm vụ.wait

task.wait() cho ra luồng hiện tại cho đến khi thời gian được cho (theo giây) qua đi và sau đó khởi động lại luồng trên bước tiếp theo Heartbeat .

Thời gian thực sản xuất có thể khác nhau. Ví dụ mã sau đây minh họa cách phương pháp này trả lại nó vì tiện ích:

Vì thời gian trễ thực tế có thể khác nhau, mẫu mã sau đây minh họa cách bạn có thể nhận được thời gian thực bằng cách lưu giá trị trả lại của phương thức:


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

Nếu không có thời lượng được cung cấp, thời lượng sẽ mặc định là không có nghĩa là luồng sẽ tự động tiếp tục trong 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 .