title: concurrency::task destructor causes call to abort in valid use-case
body: <p>Could you please tell me if the approach I use to handle the use-case is invalid and if so, what is the right way to handle:</p>
  
  <pre><code>task&lt;int&gt; do_work(int param)
  {
      // runs some work on a separate thread, returns task with result or throws exception on failure
  }
  
  void foo()
  {
      try
      {
          auto result_1 = do_work(10000);
          auto result_2 = do_work(20000);
  
          // do some extra work
  
          process(result_1.get(), result_2.get());
      }
      catch (...)
      {
          // logs the failure details
      }
  }
  </code></pre>
  
  <p>So the code tries to execute two jobs in parallel and then process the results. If one of the jobs throws an exception, then call <code>task::get</code> will re-throw the exception. The issue happens if both tasks throw an exception. In this case the first call to <code>task::get</code> will cause stack unwind, so the destructor of the second <code>task</code> will be called and will in turn cause one more exception to be re-thrown during stack unwind which causes 'abort' to be called.</p>
  
  <p>This approach seemed completely valid to me until I faced with the issue. </p>