Procházet zdrojové kódy

Fix Sendable/main actor issues in background task cleanup

onevcat před 1 měsícem
rodič
revize
88aded8f19
1 změnil soubory, kde provedl 5 přidání a 2 odebrání
  1. 5 2
      Sources/Cache/ImageCache.swift

+ 5 - 2
Sources/Cache/ImageCache.swift

@@ -885,9 +885,10 @@ open class ImageCache: @unchecked Sendable {
 
         let taskState = BackgroundTaskState()
 
-        func endBackgroundTaskIfNeeded() {
+        @MainActor @Sendable func endBackgroundTaskIfNeeded() {
             Task { @MainActor in
                 guard let bgTask = await taskState.takeValidValueAndInvalidate() else { return }
+                guard let sharedApplication = KingfisherWrapper<UIApplication>.shared else { return }
                 #if compiler(>=6)
                 sharedApplication.endBackgroundTask(bgTask)
                 #else
@@ -904,7 +905,9 @@ open class ImageCache: @unchecked Sendable {
         Task { await taskState.setValue(createdTask) }
 
         cleanExpiredDiskCache {
-            endBackgroundTaskIfNeeded()
+            Task { @MainActor in
+                endBackgroundTaskIfNeeded()
+            }
         }
     }
 #endif