Многопоточность в Core data

swift
multithreading
coredata

#1

метод сохраняет данные В Core Data, основная проблема сохранить
let data = try? Data(contentsOf: imageUrl!) в фоновом режиме как правильно сделать?
Подскажите,пожалуйста

func saveAllFeedsCoreData() {
        
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        let context = appDelegate.persistentContainer.viewContext
        
        let privateMOC = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)
        privateMOC.parent = context
        
        let fetchRequest: NSFetchRequest<FeedCoreData> = FeedCoreData.fetchRequest()
        
        do {
            feedsCoreData = try context.fetch(fetchRequest)
        } catch {
            print(error.localizedDescription)
        }
        
        
        for feed in feeds {
            
            let entity = NSEntityDescription.entity(forEntityName: "FeedCoreData", in: context)
            let taskObject = NSManagedObject(entity: entity!, insertInto: context) as! FeedCoreData
            
            
            if feedsCoreData.contains(where: { $0.title  == feed.title && $0.date == feed.date}) {
                continue
            }
            
            taskObject.title = feed.title
            taskObject.date = feed.date
            taskObject.descriptionFeed = feed.descriptionFeed
            taskObject.dateDate = feed.dateDate as NSDate?
            
            privateMOC.perform {
                let urlString = feed.imageUrl
                let imageUrl = URL(string: urlString)
                let data = try? Data(contentsOf: imageUrl!)
                
                
                taskObject.imageNSData = data as NSData?
                print("Saved! Good Job!")
                
                do {
                    try privateMOC.save()
                    context.performAndWait {
                        do {
                            try context.save()
                            
                        } catch {
                            fatalError("Failure to save context: \(error)")
                        }
                    }
                } catch {
                    fatalError("Failure to save context: \(error)")
                }
            }  
        }
    }

#2

Как то так делается:

let appDelegate = UIApplication.shared.delegate as! AppDelegate

func saveAllFeedsCoreData() {
    let backgroudContext = appDelegate.persistentContainer.newBackgroundContext()
    
    backgroudContext.perform {
        let taskObject = FeedCoreData(context: backgroudContext)
        taskObject.imageNSData = try? Data(contentsOf: URL(string: "urlString")!)
        try? backgroudContext.save()
    }
}

Но хранить картинки в CoreData плохая идея.