2017-01-25 5 views
0

Как выполнить набор кодов отправки в последовательности. Например:Выполнение основной операции отправки

Dispatch.main.async{ 
//call API, it may takes 5-10 seconds.. 
//do something.. 
    print("done 1") 
} 

Dispatch.main.async{ 
//call API, it may takes 5-10 seconds.. 
//do something 
    print("done 2") 
} 

Dispatch.main.asyncAfter{ 
    print("completed") 
} 

Output: 
completed 
done1 
done2 

Expected output: 
done1 
done2 
completed 

Я использую основной, потому что «что-то сделать» это заполнить resut к UI. Я попытался использовать global(), но «завершено» всегда выполняется первым и не подходит для использования времени задержки отправки, поскольку не может подтвердить, сколько времени времени вызова API. нужно предложение в стрижа ~

+0

Почему бы вам не использовать обработчик завершения? Попробуйте, доступно много сообщений SO. –

+2

Поскольку основная очередь - очередная диспетчерская очередь, вы можете использовать 'Dispatch.main.async()' для своего третьего блока, а также можете использовать dispatch_group – Paulw11

ответ

0
DispatchQueue.main.async{ 
      //call API, it may takes 5-10 seconds.. 
      //do something.. 
      print("done 1") 
     } 

     DispatchQueue.main.async{ 
      //call API, it may takes 5-10 seconds.. 
      //do something 
      print("done 2") 
     } 

     DispatchQueue.main.asyncAfter(deadline: .now() + 0.1){ 
      print("completed") 
     } 

It will execute in sequence

+0

. Похоже, что это работает, но если 'done 1' и 'done 2' на самом деле занимали 5-10 секунд, вы все равно бы напечатали' завершенный' первый – Russell

+0

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

+0

Спасибо. для вас напомнили. – Raja

Смежные вопросы