title: How to trigger Mono execution after another Mono terminates
body: <p>I have a problem when I try to execute a Mono inside <code>doFinally</code> clause.
  This is my code.</p>
  
  <pre><code>public interface Locks {
  
      Mono&lt;ReactiveDistributedLock&gt; doLock(LockParams params);
  
      Mono&lt;Boolean&gt; doUnlock(ReactiveDistributedLock lock);
  
      default &lt;T&gt; Mono&lt;T&gt; withLock(LockParams params, Supplier&lt;Mono&lt;T&gt;&gt; stage) {
          return doLock(params)
                  .flatMap(lock -&gt; stage.get().doFinally(ignored -&gt; doUnlock(lock)));
  }
  </code></pre>
  
  <p>The problem is that <code>doUnlock(lock)</code> inside <code>doFinally()</code> returns a mono that no one is subscribed for because <code>doFinally</code> is not chaining. So the async code part in <code>doUnlock</code> is never actually executed.</p>
  
  <p>Is there any way to avoid this using <code>Mono</code> or <code>Flux</code> helpers?</p>