Replied in ticket. Also posting here. Currently invokeAsync() is defined as public <T> IgniteFuture<T> invokeAsync(.....).
If we need EntryProcessorResult to be returned from Future then it should be public <T> IgniteFuture<EntryProcessorResult<T>> invokeAsync(.....). I am not sure why we have this difference in sync/async counterpart. Probably, Vladimir Ozerov <https://issues.apache.org/jira/secure/ViewProfile.jspa?name=vozerov> or Taras Ledkov <https://issues.apache.org/jira/secure/ViewProfile.jspa?name=tledkov-gridgain> can provide some info. I also think that we will not changing the public API in 2.0. Let's leave it as is and then fix in next major version. --Yakov 2017-08-08 20:05 GMT+03:00 Александр Меньшиков <sharple...@gmail.com>: > Hello, I found one small bug. > > JIRA: https://issues.apache.org/jira/browse/IGNITE-5994 > > The problem is IgniteInternalCache.invokeAsync().get() will return null if > EntryProcessor return null. But the IgniteInternalCache.invoke() will > return EntryProcessorResult in the same situation (with null inside). It > can be optimization, and I guess we have to change invoke()'s result in > that case. Or it's a bug, and we have to change the result of > invokeAsync(). > > If EntryProcessor returns not null everything is okay. > > It doesn't relate with IgniteCache.invoke*. >