-1

就我而言,當應用程序啓動時,我想使用NSURLSessionDataTask調用3個Web API。我對每個API有3種不同的方法,每種方法中有一個NSURLSessionDataTask如何串行執行多個NSURLSessionDataTask?

我想以這樣一種方式塑造我的代碼,以便這3種方法連續執行。因爲方法B依賴於方法A的響應而方法C依賴於方法B的響應。獲取API響應後,每種方法還會執行一些數據庫操作。所以,我需要連續執行methodA,methodBmethodC

我知道這是合乎邏輯的事情,但我想用dispatch_semaphore_tdispatch_group_wait,但我完全不知道如何將它們與NSURLSessionDataTask結合使用。提前

dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); 

    [self syncA:^(BOOL success) { 

     NSLog(@"syncA — Completed"); 
     dispatch_semaphore_signal(semaphore); 
    }]; 

    dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); 

    [self syncB:^(BOOL success) { 

     NSLog(@"syncB — Completed"); 
     dispatch_semaphore_signal(semaphore); 
    }]; 

    dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); 

    [self syncC:^(BOOL success) { 

     NSLog(@"syncC — Completed"); 
     dispatch_semaphore_signal(semaphore); 
    }]; 

    dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); 

    NSLog(@"************* END OF SYNC *************"); 

上面的代碼粘貼在第1種方法.. 請幫我..謝謝!!!:

我試圖與這

+1

使用NSOperationQueue進行任何串行操作。 –

+0

從概念上講,'NSURLSession'是一個操作隊列! – NSPratik

+1

看看這個問題http://stackoverflow.com/questions/21198404/nsurlsession-with-nsblockoperation-and-queues –

回答

1

你在使用主隊列嗎?不要在與dispatch_semaphore_wait相同的隊列中運行回調塊,因爲dispatch_semaphore_wait會阻止隊列,並且回調將不會執行,這將導致死鎖。