@@ -309,6 +309,7 @@ final class WorktrunkStore: ObservableObject {
309309 private var lastAppQuitTimestamp : Date ?
310310 private var sidebarModelRevisionCounter : Int = 0
311311 private var refreshAllTask : Task < Void , Never > ?
312+ private var refreshAllTaskGeneration : UInt64 = 0
312313 private var refreshAllNeedsRerun : Bool = false
313314 private var lastRefreshAllCompletedAt : Date = . distantPast
314315 private let sidebarAppearRefreshInterval : TimeInterval = 20
@@ -560,21 +561,43 @@ final class WorktrunkStore: ObservableObject {
560561 return
561562 }
562563
564+ let shouldScheduleRerun = shouldScheduleRefreshRerun ( for: trigger)
563565 if let existing = refreshAllTask {
564- if shouldScheduleRefreshRerun ( for: trigger) {
566+ let observedGeneration = refreshAllTaskGeneration
567+ if shouldScheduleRerun {
565568 refreshAllNeedsRerun = true
566569 }
567570 await existing. value
571+
572+ // Existing task may be complete but still stored here until its creator resumes.
573+ if refreshAllTaskGeneration == observedGeneration {
574+ refreshAllTask = nil
575+ }
576+
577+ if shouldScheduleRerun, refreshAllNeedsRerun, refreshAllTask == nil {
578+ await startRefreshAllTask ( )
579+ }
568580 return
569581 }
570582
583+ await startRefreshAllTask ( )
584+ }
585+
586+ private func startRefreshAllTask( ) async {
587+ guard refreshAllTask == nil else { return }
588+
589+ refreshAllTaskGeneration &+= 1
590+ let generation = refreshAllTaskGeneration
571591 let task = Task { [ weak self] in
572592 guard let self else { return }
573593 await self . refreshAllBatchedLoop ( )
574594 }
575595 refreshAllTask = task
576596 await task. value
577- refreshAllTask = nil
597+
598+ if refreshAllTaskGeneration == generation {
599+ refreshAllTask = nil
600+ }
578601 }
579602
580603 private struct RefreshListResult {
0 commit comments