in src/main/java/com/twitter/whiskey/futures/CompletableFuture.java [78:100]
public boolean cancel(boolean mayInterruptIfRunning) {
if (done) return false;
synchronized(this) {
if (done) return false;
cancelled = true;
done = true;
final Exception e = new CancellationException();
for (final Listener<T> listener : listeners) {
listener.getExecutor().execute(new Runnable() {
@Override
public void run() {
listener.onError(e);
}
});
}
notifyAll();
return true;
}
}