Google鼓励我们使用fetchAsync而不是其他方式,因为它是异步的,因此将使用更少的实例时间。但是,该方法返回Future<HTTPResponse>
,并且您必须使用.get()
方法来检索实际数据。 .get()
方法正在阻止,即程序直到返回(或引发异常)才会继续执行。
问题是:有什么区别?是否真的可以节省实例时间而无需实际使用Thread
?
最佳答案
区别在于您可以在fetchAsync
和get
之间去做其他事情。
您可以执行类似(伪代码)的操作:
future = fetcher.fetchAsync (url)
while not future.isDone():
doSomethingElse()
current = future.get()
现在,您只需创建一个调用
fetch
的线程即可在线程环境中达到相同的目的,但这意味着管理您自己的线程及其之间的交互。无论如何,正如okrasz在评论中指出的那样,在GAE中不可能创建新线程(请参见here)。如果您想要的只是异步性(甚至是一个单词?)而不必担心所有这些额外的东西,则可以使用如上所示的
fetchAsync/isDone/get
组合。