發(fā)送同步網(wǎng)絡(luò)請求

NSTimeInterval threadBlockInterval = 10.0;

dispatch_group_t group = dispatch_group_create();

for (int i = 0; i < 3; ++i) {
    // enter 和 leave 必須成對出現(xiàn)
    dispatch_group_enter(group);
    
    NSURLSession *session = [NSURLSession sharedSession];
    NSURLSessionTask *task = [session dataTaskWithURL:[NSURL URLWithString:@"http://www.itdecent.cn"]
                                    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                                        
                                        // handle response
                                        
                                        // 注意:
                                        // 當(dāng)前的線程和調(diào)用線程不是一個(gè)線程,更不能返回調(diào)用線程做操作,會死鎖的。
                                        
                                        // 因?yàn)?,AFNetworking completionBlock 是返回 main thread 調(diào)用的,
                                        // 所以,如果調(diào)用線程就是 main thread 的話是不能使用 AFNetworking 的
                                        
                                        dispatch_group_leave(group);
                                    }];
    [task resume];
}

dispatch_group_wait(group, dispatch_time(DISPATCH_TIME_NOW, threadBlockInterval * NSEC_PER_SEC));

注意:

  1. 如果想在 main thread 發(fā)送同步請求,不能使用 AFNetworking
  2. 如果網(wǎng)絡(luò)做了緩存的話,也就是 completionHandler 可能會調(diào)用 >=2 次,在 dispatch_group_leave 那里需要做判斷,enterleave 調(diào)用次數(shù) 必須 保持一致
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容