/// <summary>
 /// Starts a new execution and adds it to the executions collection
 /// </summary>
 private void StartNewExecution()
 {
     try
     {
         var execution = new RequestExecution <T>(this, _session, _request);
         execution.Start();
         _running.Add(execution);
         ScheduleNext();
     }
     catch (NoHostAvailableException ex)
     {
         if (_running.Count == 0)
         {
             //Its the sending of the first execution
             //There isn't any host available, yield it to the user
             SetCompleted(ex);
         }
         //Let's wait for the other executions
     }
     catch (Exception ex)
     {
         //There was an Exception before sending: a protocol error or the keyspace does not exists
         SetCompleted(ex);
     }
 }
 public void SetNoMoreHosts(NoHostAvailableException ex, RequestExecution <T> execution)
 {
     //An execution ended with a NoHostAvailableException (retrying or starting).
     //If there is a running execution, do not yield it to the user
     _running.Remove(execution);
     if (_running.Count > 0)
     {
         Logger.Info("Could not obtain an available host for speculative execution");
         return;
     }
     SetCompleted(ex);
 }