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
组合,如上所示。
关于java - GAE fetchAsync - 有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7315815/