Múltiples NSURLSessionUploadTasks

Estoy trabajando en una aplicación que carga imágenes en un server, y estoy usando el background NSURLSessionUploadTask s. Esto funciona perfectamente para pequeños numbers de imágenes cargadas, como 10 a 20 fotos. Sin embargo, he tenido problemas al intentar cargar más de 100 imágenes a la vez. ¿Qué tan escalables son los antecedentes NSURLSessionUploadTask s?

Cuando llamo

 NSURLSessionUploadTask *task = [uploadSession uploadTaskWithRequest:request fromFile:fileURL]; 

repetidamente, bloquea el esperar de un semáforo. ¿Esto se debe al time de ida y vuelta que se comunica con el demonio de carga de background? ¿Está esperando que el demonio de carga en segundo plano procese las otras tareas de carga? Con más de 100 fotos, he visto estas llamadas bloquear un total de más de 40 segundos. Además, una vez que estas llamadas terminan, las subidas tardan un poco en avanzar, y con frecuencia se paran durante muchos segundos a la vez.

Me encantaría poder configurar mis más de 100 tareas de carga y sentarme y permitir que iOS 7 gestione las cargas para mí. Sin embargo, si tengo que hacerlo, puedo crear las tareas de carga solo unas pocas a la vez. Eso parece una pena con una function de carga de background tan avanzada disponible en iOS 7. Es posible que también esté usando NSURLConnection en iOS 6.

Gracias por tu ayuda.

NSURLSession es una NSURLConnection refactorizada y mejorada, no una herramienta mágica. Lo que hago al usarla acelera las transactions pendientes con un máximo fijo como 4 o 10. Lo hago ahora después de un largo intercambio con los foros privados de Quinn on Apples (probablemente pueda desenterrar un enlace si está interesado). Al final, su punto fue que Apple no puede hacer el estrangulamiento por ti, debes gestionar activamente el número. Entonces, sí, en este sentido, no hay mucha diferencia entre 6 y 7.

Utilizando un máximo de 4 conexiones, no tengo problemas para get cientos de imágenes a la vez.

Tengo un par de preguntas aclaratorias, y me disculpo, pero no encajan bien en el formatting de comentarios.

  1. ¿Estás creando una session usando una configuration creada con
    -[NSURLSessionConfiguration backgroundSessionConfiguration:] ?

  2. ¿Se producen tus subidas cuando tu aplicación no está en primer plano, por ejemplo, suspendida?

Para su información, informé el sorprendente retraso en

NSURLSessionUploadTask *task = [uploadSession uploadTaskWithRequest:request fromFile:fileURL];

como un error para Apple y se enteró de que es un error conocido y aún abierto en iOS.

Para evitar este problema, ahora creo el NSURLSessionUploadTask en un hilo independiente. Para evitar abrumar al nsnetworkd background nsnetworkd , lo limito a 300 tareas a la vez, lo cual funciona bien.