...
Async APIs should return IgniteFuture for consistency with other Ignite CompletableFuture, which is a current standard for async Java APIs.
ClientCompute#executeAsync
returns plain j.u.c.Future, which does not provide completion callbacks or chaining, this should be changed (deprecate old method and create a new one).
...
Thin client responses are processed by a dedicated thin-client-channel thread (see TcpClientChannel#RECEIVER_THREAD_PREFIX usages). This thread calls GridFutureAdapter#onDone for the corresponding ClientRequestFuture when an operation completes. With a naïve implementation, we would wrap ClientRequestFuture in IgniteFutureImpl and this future in a CompletableFuture directly and return the result to the user code. However, if the user code calls IgniteFuture#listen, listeners calls one of many CompletableFuture#thenX methods, the callback will be executed by the same thin-client-channel thread, potentially capturing that thread forever, so no more client responses can be processed.
...