# 超時

本頁說明單一任務的執行時限與逾時回呼的行為。

## 設定時限

```go
_, err := c.Add("@every 1m", slowJob, "slow job", 3*time.Second, func() {
	log.Println("slow job timed out")
})
if err != nil {
	log.Fatal(err)
}
```

`time.Duration` 參數是執行時限而非啟動延遲；`func()` 參數僅在超過該時限時呼叫。

## 逾時行為

| 行為 | 說明 |
|---|---|
| 計時起點 | action 開始執行時 |
| 逾時結果 | 任務標記為 `TaskFailed`，呼叫逾時回呼 |
| action goroutine | 不會被中斷，持續執行至返回 |
| 設有時限時發生 panic | 不會被 recover：action goroutine 沒有 `recover`，行程直接結束 |
| 未設定時限 | action 同步執行至返回；panic 會被 recover，任務標記為 `TaskFailed` |
| 逾時錯誤文字 | 無依賴任務為 `task timeout: <時限奈秒數>`，有依賴任務為 `task timeout <時限奈秒數>` |

`Add` 的完整選項見 [設定](/zh/configuration#任務選項)。
