title: Separated exception handling of a CompletableFuture
body: <p>I realize that I'd like the consumers of our API to not have to handle an exception. Or perhaps more clearly I'd like to ensure that the exception is always logged, but only the consumer will know how to handle success. I want the client to be able to handle the exception as well if they want, There is no valid <code>File</code> that I could return to them.</p>
  
  <p>Note: <code>FileDownload</code> is a <code>Supplier&lt;File&gt;</code></p>
  
  <pre><code>@Override
  public CompletableFuture&lt;File&gt; processDownload( final FileDownload fileDownload ) {
      Objects.requireNonNull( fileDownload );
      fileDownload.setDirectory( getTmpDirectoryPath() );
      CompletableFuture&lt;File&gt; future = CompletableFuture.supplyAsync( fileDownload, executorService );
      future... throwable -&gt; {
          if ( throwable != null ) {
              logError( throwable );
          }
          ...
          return null; // client won't receive file.
      } );
      return future;
  
  }
  </code></pre>
  
  <p>I don't really understand the <code>CompletionStage</code> stuff. Do I use <code>exception</code> or <code>handle</code>? do I return the original future or the future they return?</p>