Может кто-нибудь выполнить завершениеблок из ASIHTTPREQUEST / AFNETWORKING на фоновой нити?

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

Вопрос

Я начну свой asihtttprequest синхронно в отдельной резьбе, как это:

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

Но завершитеблок все еще уволен на главной ните. Может ли человек сохранить выполнение завершения блока в том же потоке, что и при запуске запроса?

Единственное, что я могу придумать, чтобы решить, что это необходимо определить очередь рассылки и вручную выполнить завершение блокировки в том же потоке, что удерживает ссылку на созданную очередь.Но это не решает это напрямую, потому что вы пройдете к более мягкому моменту в главной ните перед перенаправлением остальной части кода к созданной очереди рассылки.

У кого-то есть лучшее решение?

Редактировать: то же самое верно для блоков завершения AFNetWorking ...

Это было полезно?

Решение

ОК, чтобы ответить на мой вопрос: ASIHTTPREQUEST Framework не имеет возможности начать заканчивать блоки в другом потоке.

вместо этого можно использовать Framework afnetwork.Здесь у вас есть два свойства на любом типе AFOPERATION под названием « SUCKICECALLBACKQUEUE 'и' FAILUARECALLBACKQUEUE '.Где вы можете добавить заранее определенный «strong> dispatch_queue_t » для обработки выполнения блоков успеха и отказа.

Надеюсь, это поможет другим с той же проблемой!

Обновление: пример

 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];
.

Другие советы

Попробуйте использовать определенную очередь вашего собственного создания.Затем вы можете (как только он, наконец, заканчивается, в его завершении блокировки) сигнал обратно в глобальную очередь, чтобы обновить любой необходимый дисплей.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top