Защо изобщо бих искал да зареждам обект на 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);
завърши изпълнението.
Като начинаещ ми отне много време да разбера това (вижте например Грешка в Objectify Не можете да създадете ключ за обект с нулев @Id в JUnit).
Така че имам няколко въпроса:
1] Защо изобщо бих искал да зареждам обект на Objectify асинхронно?
2] Какво всъщност означава асинхронно зареждане?
3] Каква е концептуалната връзка между now()
за зареждане и now()
за запазване?
Синхронно зареждане (източник)
Thing th = ofy().load().key(thingKey).now();
Синхронно запазване (източник)
ofy().save().entity(thing1).now();
4] Защо не е синхронно поведението по подразбиране за запазване и зареждане?