protected internal override void OnSuccess()
 {
     listener.OnSuccess();
 }
 /// <summary>
 /// Asynchronously check if multiple record keys exist in one batch call.
 /// Schedule the exists command with a channel selector and return.
 /// Another thread will process the command and send the results to the listener in multiple unordered calls.
 /// <para>
 /// The policy can be used to specify timeouts.
 /// </para>
 /// </summary>
 /// <param name="policy">generic configuration parameters, pass in null for defaults</param>
 /// <param name="listener">where to send results</param>
 /// <param name="keys">array of unique record identifiers</param>
 /// <exception cref="AerospikeException">if queue is full</exception>
 public void Exists(BatchPolicy policy, ExistsSequenceListener listener, Key[] keys)
 {
     if (keys.Length == 0)
     {
         listener.OnSuccess();
         return;
     }
     if (policy == null)
     {
         policy = batchPolicyDefault;
     }
     new AsyncBatchExistsSequenceExecutor(cluster, policy, keys, listener);
 }