祐成

程式在等東西完成怎麼辦?別盲等,持續檢查直到完成

你的程式需要等 API 回應、等部署完成、等轉檔結束。盲等 60 秒可能太長也可能太短。poll_until 每秒問一次「好了嗎?」——永遠在最快的時機繼續。

朱祐成
· 7 分鐘閱讀 · 學習筆記
程式在等東西完成怎麼辦?別盲等,持續檢查直到完成
Image courtesy of The Metropolitan Museum of Art, Open Access

普桑《劫掠薩賓婦女》(The Abduction of the Sabine Women),約 1633–34 年。尼古拉・普桑(Nicolas Poussin)以古羅馬傳說為題,描繪羅穆盧斯舉手發號施令的瞬間,場面中每個人物都在同時行動與回應。現藏於紐約大都會藝術博物館。

你叫了外送,設 60 分鐘鬧鐘再下樓拿。結果 30 分鐘就到了——飯涼了。或者 60 分鐘到了下樓一看——根本還沒到。程式裡的 sleep 60 就是這個情境:盲等一個固定時間,太長浪費、太短出錯。

poll_until 是另一種等法:每分鐘刷一次手機通知,看到「已送達」立刻下樓。永遠在最快的時間拿到最熱的飯。


sleep vs poll_until

# 盲等(可能太長也可能太短)
sleep 60 && check_status

# 持續檢查(永遠在最快時機繼續)
while true; do
  status=$(check_status)
  if [ "$status" = "ready" ]; then break; fi
  sleep 1
done
情境sleep 60poll_until
5 秒就好了多等 55 秒5 秒就走
120 秒才好60 秒時誤判完成120 秒正確完成
使用者感受「不知道在幹嘛」「它在做,做到哪了」

三個層次的使用者體驗

實作方式使用者感受
sleep 60(盲等)「不知道在幹嘛,只能等」
poll_until(不顯示進度)「至少完成時會通知我」
poll_until + 進度顯示「我知道它做到哪了」

第三種就是 Netflix 的進度條(18 分鐘 / 56 分鐘):系統持續檢查「目前到哪」,即時顯示。差別不在技術,在有沒有讓等待的人知道現在的狀態


我的追問與發現

「我用 Claude Code 本來就是這種情境啊,這段是在講什麼?」

對,作為使用者你已經在享受 poll_until 了(Agent 完成會通知你)。這段的價值在於你自己建系統的時候。四個實際場景:部署後每 5 秒 curl 檢查是否 200、語音轉文字進度條即時更新、挫折飛輪排行榜掃描完成推送、客戶面前 demo 顯示「分析第 3/10 頁」取代尷尬沉默。

「所以 poll_until 的本質不是技術?」

是溝通設計。sleep 是對使用者說「你等著」。poll_until 是說「我會隨時告訴你進度」。這跟誠實介面的精神一樣——讓使用者隨時知道系統的狀態,不隱瞞、不讓人猜。


你可以怎麼用

  • 部署後:不要盲等 2 分鐘,寫個 poll 每 5 秒 curl 你的網站,回 200 就通知自己
  • 任何「處理中」的 UI:加進度條或至少加一句「正在處理…」,不要讓畫面完全靜止
  • 批次任務:跑 10 個檔案轉檔,顯示「3/10 完成」而不是「處理中請稍候」
  • 一個原則:任何讓使用者等超過 3 秒的操作,都該有進度回饋

延伸連結


一句話帶走

sleep 是對使用者說「你等著」。poll_until 是說「我隨時告訴你進度」。差別不在技術,在尊重。



📚 完整學習對話紀錄(想看完整脈絡可展開)

原文(蒸餾精華 第 10 段)

兩種等待方式的差距:

# Traditional (slow):
sleep 60 && check_status

# Top-tier (3-5x faster):
while true; do
  status=$(check_status)
  if [ "$status" = "ready" ]; then break; fi
  sleep 1
done

Claude 的白話解釋

程式常常需要「等某件事完成」。等的方式有兩種:

  • sleep 60:「我不管你好了沒,60 秒後再看。」——可能白等 50 秒,也可能 60 秒到了還沒好。
  • poll_until:「我每 1 秒問一次:好了嗎?好了嗎?好了嗎?……好了!走。」——永遠在最快的時機繼續,而且一定正確。

日常比喻:sleep 就像叫外送後設一個 60 分鐘的鬧鐘再下樓拿(可能冷掉了)。poll_until 就像每隔一分鐘刷一次手機通知,一看到「已送達」立刻下樓(永遠在最快的時間拿到熱的)。


我的提問:我用 Claude Code CLI 時本來就是這種情境,這段提醒的是自建 AI 系統時的通報機制嗎?

這段讀完我的第一反應是:我每天用 Claude Code 已經在體驗 poll_until 了。我送出指令,Claude 在背景跑,完成後通知我。我不需要盲等 60 秒,也不需要自己寫 while 迴圈。

所以我追問了:除了 CLI 這種已經幫我做好的情境,還有什麼場景是我「自己」需要寫 poll_until 的?


Claude 的回答:四個你的實際工作場景

  1. 部署後健康檢查:git push → 每 5 秒 poll → 收到 200 回應 = 部署完成
  2. 語音轉文字:30 分鐘錄音處理 → 每 3 秒查進度 → 進度條更新
  3. 挫折飛輪排行榜:AI 掃描 log → poll 完成狀態 → 完成後推送
  4. 客戶面前 demo:AI 生成報告 → 畫面顯示「正在分析第 3 頁 / 共 10 頁…」

Claude 的更深層分析:poll_until 不只是技術,是溝通設計

實作方式使用者感受
sleep 60「不知道在幹嘛,只能等」
poll_until(不顯示進度)「至少完成時會通知我」
poll_until + 進度顯示「我知道它在做什麼,做到哪了」

第三個層次就是 Netflix 的進度條(18 分 / 56 分)。它的本質就是 poll_until 的視覺化。


我學到的

sleep 是對使用者說「你等著」。poll_until 是對使用者說「我會隨時告訴你進度」。差別不在技術,在尊重。