Datos básicos: el contexto primario bloquea al secundario

Estoy haciendo un procesamiento en segundo plano en una aplicación con datos básicos. El procesamiento en segundo plano se realiza en un childObjectContext secundario. Inicialización de contexto:

appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

// the moc in appDelegate is created with .MainQueueConcurrencyType
mainThreadMOC = appDelegate.managedObjectContext!
backgroundMOC = NSManagedObjectContext(concurrencyType:NSManagedObjectContextConcurrencyType.PrivateQueueConcurrencyType)
backgroundMOC?.parentContext = mainThreadMOC

El procesamiento en segundo plano se realiza con el siguiente método:

// download all new transaction log entries
func syncItems() {

... set up the query object for parse

let moc = CoreDataStore.sharedInstance.backgroundMOC

// perform download
moc?.performBlock( {
    self.runQuery(query)   // Download stuff und do some core data work
    })
}

El depurador muestra que todo el trabajo dentro del bloque está de hecho en un hilo de fondo.

Cuando llamo a esta función desde el subproceso principal e inmediatamente bloqueo el subproceso principal (para fines de prueba) con una operación larga de datos centrales, veo que el subproceso en segundo plano se detiene y solo continúa la ejecución cuando el subproceso principal está inactivo.

// this is called from a view controller in the main thread

syncItems() // should start to work in background
for i in 0...200 {
    // do some core data work in main thread
}
// syncItems starts to work after the blocking for-loop ends.

¿Por qué está pasando eso?