| 方式 | 循環中 Status | 退出後 Status |
|---|---|---|
| await Task.Delay(1000) | 首次 Running,後續 RanToCompletion | RanToCompletion |
| Task.Delay(1000).Wait() | 始終 Running | RanToCompletion |
await 將方法拆分為狀態機,每次延遲後續續為新 Task,故狀態變為 RanToCompletion.Wait() 同步阻塞當前線程,同一 Task 持續運行,狀態保持 RunningUI 線程必須用 await Task.Delay() 保持響應;後台輪詢若無并發需求,Thread.Sleep() 更簡單且狀態符合直覺。
// 推薦:後台輪詢
while (!token.IsCancellationRequested) {
Thread.Sleep(3000); // 無狀態機開銷
DoWork();
}