title: CancellationException when using ExecutorService
body: <p>I want to wait two tasks to finish then return the result of them but sometimes I get this error. Why? Where did CancellationException come from?</p>
  
  <pre><code>public class ShouldVoteTask extends AbstractWorkerTask&lt;Void, Void, Boolean&gt; {
      private final int placeID; 
      private final int userID;
  
      public ShouldVoteTask(final int placeID, final int userID) {
          this.placeID = placeID;
          this.userID = userID;
      }
  
      @Override
      protected Boolean doInBackground(final Void... params) {
          try {
              // Prepare callables.
              final IsMaxRatingCallable call1 = new IsMaxRatingCallable(placeID);
              final DidVoteCallable call2 = new DidVoteCallable(placeID, userID);         
              final List&lt;Callable&lt;Boolean&gt;&gt; callables = new ArrayList&lt;Callable&lt;Boolean&gt;&gt;();           
              callables.add(call1);
              callables.add(call2);
  
              // Execute them.
              final ExecutorService service = Executors.newFixedThreadPool(2);            
              final List&lt;Future&lt;Boolean&gt;&gt; futures = service.invokeAll(callables, 5, TimeUnit.SECONDS);
  
              // Check the result.
              boolean result = true;
              for(final Future&lt;Boolean&gt; future : futures) {
                  if(future.get()) {
                      result = false;
                  }
              }
  
              return result;
          } catch (final InterruptedException e) {
              e.printStackTrace();
          } catch (final ExecutionException e) {
              e.printStackTrace();
          }
          return false;
      }
  }
  
  private class IsMaxRatingCallable implements Callable&lt;Boolean&gt; {
      private final int placeID;
  
      public IsMaxRatingCallable(final int placeID) {
          this.placeID = placeID;
      }
  
      @Override
      public Boolean call() throws Exception {
          return Places.isMaxRating(placeID);         
      }
  }
  
  private class DidVoteCallable implements Callable&lt;Boolean&gt; {
      private final int placeID;
      private final int userID;
  
      public DidVoteCallable(final int placeID, final int userID) {
          this.placeID = placeID;
          this.userID = userID;
      }
  
      @Override
      public Boolean call() throws Exception {
          return Votes.didVote(placeID, userID);          
      }
  }
  </code></pre>
  
  <p>Error</p>
  
  <pre><code>E/AndroidRuntime(19014): FATAL EXCEPTION: AsyncTask #1
  E/AndroidRuntime(19014): java.lang.RuntimeException: An error occured while executing doInBackground()
  E/AndroidRuntime(19014):    at android.os.AsyncTask$3.done(AsyncTask.java:200)
  E/AndroidRuntime(19014):    at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
  E/AndroidRuntime(19014):    at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
  E/AndroidRuntime(19014):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
  E/AndroidRuntime(19014):    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
  E/AndroidRuntime(19014):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
  E/AndroidRuntime(19014):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
  E/AndroidRuntime(19014):    at java.lang.Thread.run(Thread.java:1027)
  E/AndroidRuntime(19014): Caused by: java.util.concurrent.CancellationException
  E/AndroidRuntime(19014):    at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:222)
  E/AndroidRuntime(19014):    at java.util.concurrent.FutureTask.get(FutureTask.java:83)
  E/AndroidRuntime(19014):    at com.vfa.android.planet.task.ShouldVoteTask.doInBackground(ShouldVoteTask.java:43)
  E/AndroidRuntime(19014):    at com.vfa.android.planet.task.ShouldVoteTask.doInBackground(ShouldVoteTask.java:1)
  E/AndroidRuntime(19014):    at android.os.AsyncTask$2.call(AsyncTask.java:185)
  E/AndroidRuntime(19014):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
  E/AndroidRuntime(19014):    ... 4 more
  </code></pre>