为什么现在()?(客观化)

迈克尔·奥索夫斯基

为什么我要异步加载Objectify实体?异步加载实际上是什么意思?

根据有关加载的Objectify文档,以下加载实体的方法是异步的:

// Simple key fetch, always asynchronous
Result<Thing> th = ofy().load().key(thingKey);

如果我想让负载同步执行,那么我应该这样做:

Thing th = ofy().load().key(thingKey).now(); // added .now()

对我而言,异步意味着该操作将在以后的某个未指定时间进行。为了节省,异步是有意义的,因为数据存储操作可能需要一些时间才能自行完成而不阻塞应用程序代码。

但是对于加载,异步是否意味着加载将在其他时间发生?在Java中怎么可能?我以为Result<Thing> th代码行Result<Thing> th = ofy().load().key(thingKey);完成执行时必须更新变量

作为一个新手,我花了很长时间才弄清楚这一点(例如,在JUnit中查看Objectify错误“您无法为具有空@Id的对象创建键”)。

所以我有几个问题:

1]为什么我要异步加载Objectify实体?

2]异步加载实际上是什么意思?

3]now()加载和now()保存之间的概念链接是什么

同步负载(

Thing th = ofy().load().key(thingKey).now();

同步保存(

ofy().save().entity(thing1).now();

4]为什么不同步保存和加载的默认行为?

迈克尔·奥索夫斯基

Google云端支持对支持案例05483551的回复:

在Java上下文中,“异步”表示使用“未来”或类似Future的构造。java [1]中的Future是一个对象,该对象表示在当前线程中的下一行开始执行时,不一定需要执行和完成的操作。

在Java中对异步函数的调用将立即返回Future,这表示在代码的下一行继续执行的同时,后台“线程”将在计算/网络调用上起作用,但仍不需要该结果。在Future对象上调用方法.get()时,要么及时返回结果,要么返回结果,否则线程将等待直到获得结果,然后将执行传递给.get()调用之后的下一行只有这种情况发生一次。

在Objectify中,避免使用Futures,而是定义了Result接口[2],原因是与引发异常有关的原因使基于Futures进行开发很痛苦。但是,它们的工作方式几乎相同。如果常规的Future方法具有.get()方法,则Result接口(由几个不同的具体类实现,具体取决于您执行的是哪种Objectify调用)具有.now(),该方法检索结果或等待线程直到可用。

之所以可能要异步加载实体,是因为您有一个请求处理程序或API方法,该请求处理程序或API方法稍后需要在函数中使用一个Entity,但是还需要执行一些与Entity不相关的其他计算。您可以在第一行中为实体启动负载,获取Result,然后在其他不相关的代码完成执行后,仅对Result调用.now()。如果在调用.now()实际启动加载时等待了一点,则可能让响应处理程序/ API方法只是在等待结果,而不是进行有用的计算。

最后,要加载的.now()和要保存的.now()之间的概念性联系是,这两个操作都在后台发生,并且只有在对Result-调用.now()时才最终强制执行,等待执行线程由save()或load()的调用返回的接口实现对象。

我希望这有助于为您解释Java Objectify中的异步构造。如果您还有其他疑问或问题,请随时将其包含在您的回复中,我们将竭诚为您服务。

真挚地,

尼克技术解决方案代表云平台支持

[1] http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Future.html

[2] http://objectify-appengine.googlecode.com/svn/trunk/javadoc/com/googlecode/objectify/Result.html

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

客观化与关系

来自分类Dev

为什么此按ID进行客观化查询不会返回结果

来自分类Dev

客观化计数异步

来自分类Dev

客观化计数异步

来自分类Dev

客观化实体关系

来自分类Dev

客观化和交易

来自分类Dev

客观化查询:按日期过滤

来自分类Dev

客观化POST / LIKE / USER关系

来自分类Dev

客观化条件更新交易模式

来自分类Dev

客观化查询过滤器,例如“名称包含”

来自分类Dev

客观化查询过滤器,例如“名称包含”

来自分类Dev

经典Vuex到模块化:为什么现在没有定义Getter?

来自分类Dev

为什么现在显示DataTable的列标签?

来自分类Dev

为什么现在显示DataTable的列标签?

来自分类Dev

什么是“现在”的ADO.net参数化?

来自分类Dev

实例化类对象的客观C错误

来自分类Dev

什么是客观的 c 运行时特性?

来自分类Dev

为什么这个随机的黑色最小化窗口框出现在我的桌面上?

来自分类Dev

为什么FreeAndNil实现在Free之前做Nil?

来自分类Dev

为什么.lesshst不断出现在我的〜

来自分类Dev

为什么“(base)”出现在我的终端提示前面?

来自分类Dev

为什么我的PartialView呈现在form标签之外?

来自分类Dev

为什么我的简单Firefox扩展现在拒绝运行?

来自分类Dev

为什么现在我的DateTime给我月份和月份?

来自分类Dev

Scala:为什么AnyVal出现在这里?

来自分类Dev

为什么错误出现在错误的行上?

来自分类Dev

为什么此对象现在显示任何内容?

来自分类Dev

Dropbear-> Openssh:为什么现在要求输入密码?

来自分类Dev

为什么此枚举声明现在有效?