Разница в том, как обрабатывается параллелизм.
С performBackgroundTask
...
container.performBackgroundTask { (context) in
// ... do some task on the context
}
Контейнер создает новый фоновый контекст для выполнения задачи.Эта функция немедленно возвращается, поэтому, если вы вызовете ее еще раз до завершения задачи, обе задачи могут быть запущены одновременно.
С newBackgroundContext
...
let context = persistentContainer.newBackgroundContext()
context.perform {
// ... do some task on the context
}
Вы создаетеновый контекст и делать некоторые вещи в фоновом режиме.Если вы снова вызовете context.perform
в том же контексте , то новое замыкание также будет работать в фоновом режиме.Но так как это тот же контекст, второй не начинается, пока не закончится первый.
То, что сводится к тому, что первый может иметь много фоновых контекстов, работающих одновременно, в то время как второй делает этоПроще убедиться, что есть только один.
Первый вариант может иметь больше одновременных фоновых задач, что может быть хорошо, но это также может означать, что множественные вызовы имеют конфликтующие изменения.Второй вариант сериализует фоновые задачи, и поскольку они не выполняются одновременно, они не конфликтуют друг с другом.Что лучше, зависит от того, что вы делаете в замыканиях.