title: why does doOnComplete execute immedeatily regardless of delay()
body: <p>I was just writing some sample code with <code>takeUntil</code> - </p>
  
  <pre><code>final Observable&lt;Integer&gt; stopper = Observable.just(1)
              .doOnComplete(() -&gt; view.append("second stream complete"))
              .delay(500, TimeUnit.MILLISECONDS);
  
  return Observable
              .range(0, 10)
              .zipWith(Observable.interval(100, TimeUnit.MILLISECONDS), (item, interval) -&gt; item)
              .takeUntil(stopper)
              .observeOn(AndroidSchedulers.mainThread())
              .subscribeOn(Schedulers.io())
              .subscribe(view::append);
  </code></pre>
  
  <p>So ideally, the stopper emits after 500ms and terminates the second observable, which it does. BUT the <code>doOnComplete</code> prints immediately.
  <a href="https://i.stack.imgur.com/Jbhs8.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/Jbhs8.png" alt="enter image description here"></a></p>
  
  <p>As I understand from the documentation - <code>delay</code> shifts the events forward in time - including the complete event. So why would this happen?</p>