¿Se puede ejecutar un bloque de finalización de AsiHTTPRequest / AFnetworking en un hilo de fondo?

StackOverflow https://stackoverflow.com/questions/9465834

Pregunta

Comience mi asihttPRequest sincrónicamente en un hilo separado como este:

//inside this start method I create my ASIHTTPRequest and start it
dispatch_async(dispatch_get_global_queue(0, 0), ^{
    [process start];
});

Pero el bloque de finalización aún se enciende en el hilo principal. ¿Puede uno mantener la ejecución del bloque de finalización en el mismo hilo que se inició la solicitud?

Lo único que puedo encontrar para resolver Esto es definir una cola de envío y ejecutar manualmente el bloque de finalización en el mismo hilo, manteniendo así una referencia a una cola creada.Pero eso no lo resuelve directamente porque pasaría por un maldito momento en el hilo principal antes de redirigir el resto del código a la cola de envío creada.

¿Alguien tiene una solución mejor?

Editar: Lo mismo es cierto para los bloques de finalización de AFNetworking ...

¿Fue útil?

Solución

OK, para responder a mi propia pregunta: El marco ASIHTTPRequest no tiene una opción para iniciar bloques de finalización en un hilo diferente.

En su lugar, se puede usar el marco AFNETWORK.Aquí tiene dos propiedades en cualquier tipo de afoperación llamado ' SuccessAllBackQueue ' y ' FailurElBackQueue '.Donde puede agregar un ' despachable_queue_t ' para manejar la ejecución de los bloques de éxito y falla.

Espero que esto ayude a otros con el mismo problema!

Actualización: Ejemplo

 dispatch_queue_t requestQueue = dispatch_queue_create("requestQueue", NULL);
 AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:yourRequest];
 operation.successCallbackQueue = requestQueue;
 operation.failureCallbackQueue = requestQueue;
 [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
    // add code for completion
 } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    // add code for failure
 }];
 [operation start];

Otros consejos

Intenta usar una cola definida de su propia creación.Luego, puede (una vez que finalmente termine, en su bloque de finalización) se vuelva a la cola global para actualizar cualquier pantalla necesaria.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top