Pepper QISDK 同步调用是否确保结果?

Does Pepper QISDK sync calls ensure a result?

QiSDK 文档可以理解,Future<T>async() 调用具有结果状态。

e.x.

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()

e.x。刚刚

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

是否确保操作成功完成

它还会锁定 current Thread 或者我们应该了解 sync() 调用什么?因为文档说,最佳实践是始终使用 async(),但是如果我不希望 Pepper 为操作创建 new Thread 并将它们与代码一起处理怎么办。

Does it ensures that the operation will be completed with the success?

不,是否使用async()对成功几率没有影响;发生的变化是,如果发生错误:

  • 使用 .async(),未来将以错误结束(.hasError().getErrorMessage() ...)
  • 对于同步调用,调用会引发异常(因此您可以用 try / catch 包装它)

Will it also lock the current Thread or what should we know about sync() calls?

是的,同步调用将阻塞当前线程,直到操作完成(成功、取消或失败),这意味着您永远不应该在 android 主线程(UI 线程),否则你会得到一个 NetworkOnUIThread 异常。

请注意,并非所有呼叫都会自行完成;例如 Chat 对象上的 chat.run() 将 运行 “永远”,也就是说,直到它被取消或出现错误。这是 .sync() 有用的另一种情况,因为您将获得一个可以取消以停止聊天的未来。