Menu
CoddyTech

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)
challenge icon

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
quiz iconTự kiểm tra

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

Tự luyện tập: Trình biên dịch Lua online