กำหนดการรหัส

*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่

การกำหนดการรหัสมีประโยชน์ในหลายสถานการณ์ เช่น การรับประกันว่ารหัสจะดำเนินการหลังจากที่การกระทำหรือรอบเฉพาะเสร็จสิ้น หรือการหน่วงเวลารหัสเป็นระยะเวลาที่เฉพาะเจาะจง คุณสามารถใช้ไลบรารี task เพื่อปรับแต่ง ตัวจัดการงาน ของ Roblox เพื่อจัดการและกำหนดการรหัสได้ นอกจากนี้คุณยังสามารถใช้ไลบรารีที่คล้ายกันเรียกว่า coroutine เพื่อกำหนดการรหัสซึ่งมีฟังก์ชันเสริมบางอย่าง

วิธีการทั่วไป

ต่อไปนี้คือวิธีการ task ที่พบได้บ่อยที่สุดซึ่งใช้ในการกำหนดการรหัส คุณควรใช้วิธีการงานแทนที่วิธีการกำหนดการแบบเดิม เช่น wait() เพื่อให้แน่ใจว่ารหัสของคุณทำงานได้อย่างมีประสิทธิภาพ

ตารางต่อไปนี้แสดงรายการวิธีการทั่วไปแบบเดิมที่เกี่ยวข้องและตัวเลือกที่ได้รับการปรับปรุงที่แนะนำ:

วิธีการทั่วไปแบบเดิมวิธีการงานตัวเลือกเพิ่มเติม
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() รับเธรดหรือฟังก์ชันและดำเนินการต่อ ทันที ผ่านตัวจัดการของเอนจิน อาร์กิวเมนต์เพิ่มเติมจะถูกส่งไปยังเธรดหรือฟังก์ชันที่กำลังดำเนินการต่อ

ตัวอย่างรหัสต่อไปนี้แสดงให้เห็นว่าคุณสามารถใช้ task.spawn() เมื่อเรียกฟังก์ชันที่อาจหยุดระหว่างการวนซ้ำผ่านชุดของวัตถุ:


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

task.defer()

task.defer() รับเธรดหรือฟังก์ชันและเลื่อนมันออกไปจนถึงจุดการคืนค่าปัจจุบันภายในเฟรมปัจจุบัน อาร์กิวเมนต์เพิ่มเติมจะถูกส่งไปยังเธรดหรือฟังก์ชันที่กำลังดำเนินการต่อ

คุณควรใช้วิธีนี้เมื่อคุณต้องการพฤติกรรมที่คล้ายกันกับ task.spawn() แต่ไม่สนใจว่าเธรดจะทำงานทันทีหรือล่าช้า ตัวอย่างรหัสต่อไปนี้แสดงให้เห็นว่าคำสั่ง print() สำหรับ "A" จะเลื่อนไปจนกว่าคำสั่ง print() สำหรับ "B" จะดำเนินการ:


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

task.delay()

task.delay() รับเธรดหรือฟังก์ชันและกำหนดการให้กลับมาดำเนินการหลังจากเวลาที่กำหนดผ่านไปในขั้นตอนถัดไปของ Heartbeat เธรดกลับมาดำเนินการพร้อมการจัดการข้อผิดพลาดในตัวและการสนับสนุนสำหรับฟีเจอร์อื่น ๆ ของเอนจิน อาร์กิวเมนต์เพิ่มเติมจะถูกส่งไปยังเธรดหรือฟังก์ชันที่กำลังดำเนินการต่อ

เนื่องจากเวลาที่ล่าช้าจริงอาจแตกต่างกันไป ตัวอย่างรหัสต่อไปนี้แสดงให้เห็นว่าคุณสามารถคำนวณเวลานั้นได้โดยการส่งเวลาปัจจุบันเป็นอาร์กิวเมนต์:


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

ระยะเวลาศูนย์จะส่งผลให้เธรดหรือฟังก์ชันกลับมาดำเนินการในขั้นตอนถัดไป

task.wait()

task.wait() ทำการหยุดเธรดปัจจุบันจนกว่าระยะเวลาที่กำหนด (เป็นวินาที) จะหมดไปและจากนั้นกลับมาดำเนินการเธรดในขั้นตอนถัดไปของ Heartbeat

เวลาที่หยุดจริงอาจแตกต่างกัน ตัวอย่างรหัสต่อไปนี้แสดงให้เห็นว่าวิธีนี้ส่งค่ากลับเพื่อความสะดวก:

เนื่องจากเวลาที่ล่าช้าจริงอาจแตกต่างกันไป ตัวอย่างรหัสต่อไปนี้แสดงให้เห็นว่าคุณสามารถรับเวลาได้จริงโดยการเก็บค่าที่คืนจากวิธีนี้:


local elapsedTime = task.wait(2) -- รอเป็นเวลา 2 วินาที
print(elapsedTime) --> 2.0792941

หากไม่ได้กำหนดระยะเวลา ระยะเวลาจะถูกตั้งค่าเป็นศูนย์ ซึ่งหมายความว่าเธรดจะกลับมาดำเนินการในขั้นตอนถัดไปโดยอัตโนมัติ ซึ่งหมายความว่า task.wait() มีพฤติกรรมที่เหมือนกับ RunService.Heartbeat

©2026 Roblox Corporation. Roblox, โลโก้ Roblox และ Powering Imagination เป็นส่วนหนึ่งของเครื่องหมายการค้าที่จดทะเบียน และไม่ได้จดทะเบียนของเราในสหรัฐฯ และประเทศอื่นๆ