Kiểm tra trạng thái coroutine
Thuộc phần Logic và luồng chương trình trong hành trình Lua của Coddy. Bài học 52 trên 54.
Khi làm việc với coroutine, bạn thường cần biết coroutine đang ở trạng thái nào. Nó đang chạy phải không? Nó đang tạm dừng và chờ được tiếp tục phải không? Nó đã thực thi xong chưa?
Lua cung cấp hàm coroutine.status() để trả lời những câu hỏi này.
Hàm coroutine.status() nhận một coroutine làm đối số và trả về một chuỗi mô tả trạng thái hiện tại của coroutine đó. Có ba trạng thái có thể xảy ra:
| "suspended" | Coroutine tạm dừng tại yield() và có thể được tiếp tục chạy |
| "running" | Coroutine hiện đang chạy |
| "dead" | Coroutine đã chạy xong và không thể tiếp tục chạy nữa |
Cách sử dụng như sau:
function task()
coroutine.yield()
print("Finishing")
end
local co = coroutine.create(task)
print(coroutine.status(co)) -- "suspended"
coroutine.resume(co)
print(coroutine.status(co)) -- "suspended" (tạm dừng tại yield)
coroutine.resume(co)
print(coroutine.status(co)) -- "dead" (đã kết thúc)Thử thách
DễViết một hàm checkCoroutineLifecycle nhận resumeCount và trả về một chuỗi hiển thị trạng thái của coroutine tại các thời điểm khác nhau trong vòng đời của nó.
Tạo một coroutine tạm dừng một lần rồi hoàn tất. Kiểm tra và ghi lại trạng thái sau khi tạo, sau lần tiếp tục đầu tiên (khi coroutine tạm dừng tại yield) và sau các lần tiếp tục tiếp theo, dựa trên resumeCount.
Logic:
- Tạo một hàm tạm dừng một lần bằng chuỗi
"paused", rồi hoàn tất - Đưa hàm này vào một coroutine bằng
coroutine.create() - Kiểm tra trạng thái ngay sau khi tạo bằng
coroutine.status() - Tiếp tục coroutine một lần rồi kiểm tra lại trạng thái
- Tiếp tục coroutine thêm nhiều lần dựa trên
resumeCount - 1(tổng số lần tiếp tục = resumeCount) - Kiểm tra trạng thái cuối cùng sau tất cả các lần tiếp tục
- Trả về một chuỗi chứa cả ba trạng thái theo định dạng:
initial: [status]\\nafter first resume: [status]\\nfinal: [status]
Tham số:
resumeCount(số): Tổng số lần tiếp tục coroutine (tối thiểu là 1)
Giá trị trả về: Một chuỗi hiển thị trạng thái coroutine tại ba thời điểm trong vòng đời của nó (chuỗi). Định dạng: initial: suspended\nafter first resume: suspended\nfinal: dead
Tự làm thử
function checkCoroutineLifecycle(resumeCount)
-- Viết code ở đây
end
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Logic và luồng chương trình
2Các hàm khác của thư viện table
table.concat()Tạo table và unpack()table.sort()Sắp xếp tùy chỉnh bằng hàmÔn tập: Bảng điểm cao5Dự án: Bộ máy trò chơi phiêu lưu bằng văn bản
Thiết lập dự án: Căn phòngLiên kết các phòng3Các khái niệm nâng cao về hàm
Trả về nhiều giá trịHàm nhận số lượng đối số linh hoạt (...)Hàm là giá trị hạng nhấtHàm ẩn danhClosure là gì?Ôn tập: bộ xử lý sự kiện đơn giản9Coroutine cho người mới bắt đầu
Coroutine là gì?Tạo và tiếp tục coroutineTạm dừng bằng coroutine.yield()Resume và yieldKiểm tra trạng thái coroutineÔn tập: trình tạo sốÔn tập: phép toán vectơTự luyện tập: Trình biên dịch Lua online