Обеспечивают ли вызовы Pepper QISDK syn c результат? - PullRequest
1 голос
/ 03 августа 2020

Из документов QiSDK понятно, что async() вызовы Future<T> имеют статусы результатов.

ex

var goto = GoToBuilder..
var operation = goto.async().run().thenConsume {    
//if(it.isSuccess or it.hasError()) etc. statuses are available
}
//These statuses are also available in the $operation variable afterwards
if(operation.hasError()) {...}

Но когда мы вызываем операции sync()

ex just

var goto = GoToBuilder...
goto.run()

Обеспечивает ли успешное завершение операции ?

Будет ли он также блокировать current Thread или что мы должны знать о sync() звонках? Поскольку в документации говорится, что лучше всего всегда использовать async(), но что, если я не хочу, чтобы Pepper создавал new Thread для действия и обрабатывал их вместе с кодом.

1 Ответ

1 голос
/ 07 августа 2020

Обеспечивает ли это успешное завершение операции?

Нет, использование async() или нет не влияет на шансы на успех; что меняется в том случае, если возникает ошибка:

  • С .async() будущее закончится sh с ошибкой (.hasError(), .getErrorMessage() ...)
  • С вызовом syn c вызов вызовет исключение (так что вы можете обернуть его с помощью try / catch)

Будет ли он также блокировать текущий поток или что мы должны знать о вызовах syn c ()?

Да, вызов syn c блокирует текущий поток до тех пор, пока действие не будет завершено (успешно, отменено или завершится неудачно), что означает, что вам следует никогда не делайте этого в основном потоке android (поток пользовательского интерфейса), иначе вы получите исключение NetworkOnUIThread.

Обратите внимание, что не все вызовы fini sh сами по себе; например, chat.run() на объекте Chat будет работать «вечно», то есть до тех пор, пока он не будет отменен или не возникнет ошибка. Это еще один случай, когда .sync() полезно, потому что вы получите будущее, которое вы можете отменить, чтобы остановить чат.

...