Moreover, have a look at *CompletableFuture *interface: handle handle*Async*
thenApply thenApply*Async* And so on. One more argument to return methods with "Async" suffix from good old GridGain days. On Thu, Jul 21, 2016 at 12:38 PM, Vladimir Ozerov <voze...@gridgain.com> wrote: > It is a matter of taste. In .NET we have "Async" methods near synchronous > methods because it is common practice in .NET world: > V Get(K key); > Task<V> GetAsync(K key); > > For Java we can go the same way, or introduce separate interface. It will > not be identical to synchronous, because it will have different return > types and probably will contain only those methods which support async > execution. > > Personally I like .NET approach. It is simple and straightforward. User do > not have to bother about whether current instance is sync or async (like > now), and will not have to perform additional steps like > *IgniteCache.withAsync().get()*. Do you want to call GET asynchronously? > No problem, *IgniteCache.getAsync()*. Simple, expressive, straightforward. > > The drawback is that our interfaces will become "heavier". But it is 2016 > year, we all have IDEs. I do not see any problems if we will have 62 + 36 = > 98 methods instead of current 62 on cache API. > > Vladimir. > > > On Thu, Jul 21, 2016 at 12:21 PM, Dmitriy Setrakyan <dsetrak...@apache.org > > wrote: > >> Do I understand correctly that the community is proposing to have 2 >> identical interfaces, one for sync operations and another for async >> operations? >> >> On Thu, Jul 21, 2016 at 12:15 PM, Sergi Vladykin < >> sergi.vlady...@gmail.com> >> wrote: >> >> > +1 >> > >> > Finally it is time to drop this "cool feature" from Ignite! >> > >> > Sergi >> > >> > On Thu, Jul 21, 2016 at 11:13 AM, Vladimir Ozerov <voze...@gridgain.com >> > >> > wrote: >> > >> > > Alex. >> > > >> > > Of course, some distributed operations will involve some kind of >> > asynchrony >> > > even in synchronous mode. My point is that we should not blindly do >> > things >> > > like that: >> > > >> > > V get(K key) { >> > > return getAsync(key),get(); >> > > } >> > > >> > > Instead, get() has it's own path, getAsync() another path. But of >> course >> > > they could share some common places. E.g. I remember we already fixed >> > some >> > > cache operations in this regard when users hit async semaphore limit >> when >> > > calling synchronous gets. >> > > >> > > Another point is that async instances may possibly accept >> user-provided >> > > Executor. >> > > >> > > Vladimir, >> > > >> > > On Thu, Jul 21, 2016 at 11:04 AM, Semyon Boikov <sboi...@gridgain.com >> > >> > > wrote: >> > > >> > > > Another issue which usually confuses users is Ignite 'implementation >> > > > details' of asynchronous execution: it operation is local it can be >> > > > executed from calling thread (for example, if 'async put' is >> executed >> > in >> > > > atomic cache from primary node then cache store will be updated from >> > > > calling thread). Does it make sense to fix this as well? >> > > > >> > > > >> > > > On Thu, Jul 21, 2016 at 10:55 AM, Yakov Zhdanov < >> yzhda...@apache.org> >> > > > wrote: >> > > > >> > > > > Agree with Alex. Vova, please go on with issues taking Alex's >> > comments >> > > > into >> > > > > consideration. >> > > > > >> > > > > Thanks! >> > > > > >> > > > > --Yakov >> > > > > >> > > > > 2016-07-21 10:43 GMT+03:00 Alexey Goncharuk < >> > > alexey.goncha...@gmail.com >> > > > >: >> > > > > >> > > > > > Big +1 on this in general. >> > > > > > >> > > > > > I would also relax our guarantees on operations submitted from >> the >> > > same >> > > > > > thread. Currently we guarantee that sequential invocations of >> async >> > > > > > operations happen in the same order. I think that if a user >> wants >> > > such >> > > > > > guarantees, he must define these dependencies explicitly by >> calling >> > > > > chain() >> > > > > > on returning futures. >> > > > > > >> > > > > > This change will significantly improve cache operations >> performance >> > > in >> > > > > > async mode. >> > > > > > >> > > > > > 3) Sync operations normally* should not* be implemented through >> > > async. >> > > > > This >> > > > > > > is a long story - if we delegate to async, then we have to >> bother >> > > > with >> > > > > > > additional threads, associated back-pressure control and all >> that >> > > > crap. >> > > > > > > Sync call must be sync unless there is a very strong reason >> to go >> > > > > through >> > > > > > > async path. >> > > > > > > >> > > > > > Not sure about this, though. In most cases a cache operation >> > implies >> > > > > > request/response over the network, so I think we should have >> > explicit >> > > > > > synchronous counterparts only for methods that are guaranteed >> to be >> > > > > local. >> > > > > > >> > > > > >> > > > >> > > >> > >> > >