Вообще, в самом драйвере C* и сделано все асинхронным и есть два вызова - executeSync и executeAsync, при этом синхронный вызов лишь дожидается выполнения Future, возвращаемого executeAsync