Google鼓励我们使用fetchAsync而不是其他方式,因为它是异步的,因此将使用更少的实例时间。但是,该方法返回Future<HTTPResponse>,并且您必须使用.get()方法来检索实际数据。 .get()方法正在阻止,即程序直到返回(或引发异常)才会继续执行。

问题是:有什么区别?是否真的可以节省实例时间而无需实际使用Thread

最佳答案

区别在于您可以在fetchAsyncget之间去做其他事情。

您可以执行类似(伪代码)的操作:

future = fetcher.fetchAsync (url)
while not future.isDone():
    doSomethingElse()
current = future.get()


现在,您只需创建一个调用fetch的线程即可在线程环境中达到相同的目的,但这意味着管理您自己的线程及其之间的交互。无论如何,正如okrasz在评论中指出的那样,在GAE中不可能创建新线程(请参见here)。

如果您想要的只是异步性(甚至是一个单词?)而不必担心所有这些额外的东西,则可以使用如上所示的fetchAsync/isDone/get组合。

10-06 06:45