2015-04-14 2 views
-5

В чем разница между следующими асинхронными блоками?Разница асинхронных блоков?

Run Background Task as Loop in Swift

func delay(delay:Double, closure:()->()) { 
    dispatch_after(
    dispatch_time(
     DISPATCH_TIME_NOW, 
     Int64(delay * Double(NSEC_PER_SEC)) 
    ), 
    dispatch_get_main_queue(), closure) 
} 

и:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), {() -> Void in 
     println("do some background task") 

     dispatch_async(dispatch_get_main_queue(), {() -> Void in 
      println("update some UI") 

     }) 
}) 
+2

Извините? Все задействованные методы имеют отличную документацию, и все они ведут себя точно так же, как задокументировано. Кроме того, мы используем закрытие, которое мы не знаем, другое вызывает println дважды. Каков ваш реальный вопрос? – gnasher729

+1

Похоже, вы просто скопировали материал из ответа на другой вопрос, уничтожив каждый контекст и, следовательно, превратив его абсолютно бессмысленным. – gnasher729

ответ

3

Первый код не выполняет задачу в фоновом режиме - он ждет, пока delay не вверх, а затем вызывает замыкание, поставляемый в качестве аргумента к функции delay.

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

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