# 排程器生命週期

本頁列出各排程器操作在 `Start` 之前與事件迴圈執行中的行為差異。

## 各狀態下的操作

| 操作 | 未啟動 | 執行中 |
|---|---|---|
| `Add` | 直接加入最小堆 | 經 `add` channel 送入事件迴圈 |
| `Remove` | 停用並自最小堆移除 | 經 `remove` channel 移除 |
| `RemoveAll` | 停用全部任務 | 經 `removeAll` channel 清空最小堆 |
| `Start` | 啟動 Worker 池與事件迴圈 | no-op |
| `Stop` | 回傳立即 cancel 的 context | 停止迴圈、等待 Worker 結束，回傳於進行中任務結束後 cancel 的 context |

## Stop 後重新啟動

`Stop` 後再呼叫 `Start` 會重新啟動事件迴圈，無依賴任務會繼續觸發。依賴 Worker 不會恢復：`Stop` 關閉了 Worker 的停止 channel，`Start` 沿用同一個 channel，新的 Worker 一啟動就結束。依賴任務觸發時仍會送入佇列但不會被判斷，容量 1024 的 Wait 佇列滿了之後事件迴圈會阻塞。重新啟動後再次呼叫 `Stop` 會再關閉同一個 channel，並以 `close of closed channel` panic。帶有依賴任務的排程器請以 `core.New` 重新建立，而非重新啟動。

`New`、`Start`、`Stop` 簽章見 [排程器 API](/zh/api-reference)。
