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()
有用的另一种情况,因为您将获得一个可以取消以停止聊天的未来。
从 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()
有用的另一种情况,因为您将获得一个可以取消以停止聊天的未来。