@@ -25,6 +25,7 @@ import SwiftUI
2525 private var monitor : NWPathMonitor
2626 private let monitorQueue = DispatchQueue ( label: " CourseViewModel.Network " )
2727 private var isNetworkAvailable = true
28+ private var cacheMessageTask : Task < Void , Never > ?
2829
2930 private var hasPerformedInitialLoad = false
3031
@@ -62,7 +63,19 @@ import SwiftUI
6263 startNetworkMonitor ( )
6364 }
6465
65- deinit { monitor. cancel ( ) }
66+ deinit {
67+ cacheMessageTask? . cancel ( )
68+ monitor. cancel ( )
69+ }
70+
71+ private func scheduleCacheMessageClear( ) {
72+ cacheMessageTask? . cancel ( )
73+ cacheMessageTask = Task { @MainActor [ weak self] in
74+ try ? await Task . sleep ( nanoseconds: 2_000_000_000 )
75+ guard !Task. isCancelled else { return }
76+ self ? . cacheUpdateMessage = nil
77+ }
78+ }
6679
6780 private func startNetworkMonitor( ) {
6881 monitor. pathUpdateHandler = { [ weak self] path in
@@ -111,6 +124,7 @@ import SwiftUI
111124 async
112125 {
113126 if forceRefresh { self . isRefreshing = true }
127+ cacheMessageTask? . cancel ( )
114128
115129 // 先載入快取顯示
116130 if let cached = loadCoursesFromCache ( ) , !cached. isEmpty {
@@ -146,11 +160,7 @@ import SwiftUI
146160 self . isRefreshing = false
147161 self . cacheUpdateMessage =
148162 forceRefresh ? " Refreshed successfully " : " Course data updated "
149-
150- Task { @MainActor [ weak self] in
151- try ? await Task . sleep ( nanoseconds: 2_000_000_000 )
152- self ? . cacheUpdateMessage = nil
153- }
163+ scheduleCacheMessageClear ( )
154164 } catch {
155165 self . isUpdatingCache = false
156166 self . isRefreshing = false
@@ -159,10 +169,7 @@ import SwiftUI
159169 self . errorMessage = " Failed to fetch courses. "
160170 } else if forceRefresh {
161171 self . cacheUpdateMessage = " Refresh failed "
162- Task { @MainActor [ weak self] in
163- try ? await Task . sleep ( nanoseconds: 2_000_000_000 )
164- self ? . cacheUpdateMessage = nil
165- }
172+ scheduleCacheMessageClear ( )
166173 }
167174 Self . logger. error ( " Fetch error: \( error. localizedDescription) " )
168175 }
0 commit comments