title: How to handle errors and keep an Observable alive in .mapParallelUnordered
body: <p>I am using <code>Monix 3</code> and have a kind of this code:</p>
  
  <pre><code>  Observable.fromIterable(Seq(1, 2, 3, 4, 5, 6, 7, 8, 9))
      .flatMap(i =&gt;
        if (i % 2 == 0) {   // Bad i
          Observable.empty
        } else
          Observable.pure(i)
      )
      .foreachL(i =&gt; print(s"Good i: $i"))   /*Output: Good i: 1
                                                       Good i: 3
                                                       Good i: 5
                                                       Good i: 7
                                                       Good i: 9*/
  </code></pre>
  
  <p>This code works good, but I have a numerous long while IO operations, so decided to refactor with <code>.mapParallelUnordered</code>:</p>
  
  <pre><code>  Observable.fromIterable(Seq(1, 2, 3, 4, 5, 6, 7, 8, 9))
      .mapParallelOrdered(3)(i =&gt;
        if (i % 2 == 0) {
          Task.raiseError(new Exception(s"Bad i: $i"))
        } else
          Task.pure(i)
      )
      .foreachL(i =&gt; print(s"Good i: $i"))    /*Output: Good i: 1*/
  </code></pre>
  
  <p>I am trying to get the same result, as in the first example, but in parallel processing. The problem is <code>Task.raiseError</code> kills a whole observable, so it stops on <code>i = 2</code>.</p>
  
  <p>How to handle errors and  keep an Observable alive?</p>