<div dir="ltr">Hi Sebastian!<br><br>It is indeed possible to implement a whole host of interesting utility methods both asynchronously and non-blocking (could be CompletionStage-based): <a href="http://www.scala-lang.org/api/current/#scala.concurrent.Future$">http://www.scala-lang.org/api/current/#scala.concurrent.Future$</a><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Dec 1, 2014 at 4:38 PM, Millies, Sebastian <span dir="ltr"><<a href="mailto:Sebastian.Millies@softwareag.com" target="_blank">Sebastian.Millies@softwareag.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class=""><br>
<br>
> -----Original Message-----<br>
> From: <a href="mailto:concurrency-interest-bounces@cs.oswego.edu">concurrency-interest-bounces@cs.oswego.edu</a> [mailto:<a href="mailto:concurrency-interest-">concurrency-interest-</a><br>
</span><span class="">> <a href="mailto:bounces@cs.oswego.edu">bounces@cs.oswego.edu</a>] On Behalf Of Doug Lea<br>
> Sent: Monday, December 01, 2014 2:59 PM<br>
> To: concurrency-interest<br>
> Subject: Re: [concurrency-interest] CompletableFuture in Java 8<br>
><br>
[snip]<br>
<br>
</span><span class="">> This is the model we had in mind with CompletionStage:<br>
> It doesn't include any way of getting or setting or waiting for results, so is a<br>
> preferable return type for most user-level methods in layered frameworks.<br>
<br>
</span>[snip]<br>
<br>
Perhaps this is somewhat at a tangent, but why are allOf(), anyOf() not in CompletionStage ?<br>
They don't wait, do they?<br>
<br>
Example: Tomasz Nurkiewicz has proposed the following<br>
code for aggregating the results of multiple CompletableFutures in a List:<br>
<br>
  /**<br>
   * We'd like to utilize existing CompletableFuture.allOf(). Unfortunately, it has two minor drawbacks - it takes<br>
   * vararg instead of Collection and doesn't return a future of aggregated results but Void instead. By aggregated<br>
   * results I mean: if we provide List<CompletableFuture<Double>>, it should return CompletableFuture<List<Double>>,<br>
   * not CompletableFuture<Void>! Luckily it's easy to fix with a bit of glue code.<br>
   */<br>
  public static <T> CompletableFuture<List<T>> sequence(List<CompletableFuture<T>> futures) {<br>
    // the trick is to use existing allOf() but when allDoneFuture completes (which means all/ underlying futures are done),<br>
    // simply iterate overall futures and join() (blocking wait) on each. However this call is guaranteed not to block because<br>
    // by now all futures completed!<br>
    CompletableFuture<Void> allDoneFuture = CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures<br>
        .size()]));<br>
    return allDoneFuture.thenApply(v -> futures.stream().map(CompletableFuture::join).collect(toList()));<br>
  }<br>
<br>
Would it not be nicer if this method could be called with List<CompletionStage> argument (of course also returning a<br>
CompletionStage)? I find myself inserting map(s->s.toCompletionStage()) in my streams in order to call this<br>
method, and then continue working with CompletionStage methods (thenApply() etc.) on the "aggregated" result.<br>
<br>
I'd like to avoid CompletableFuture showing up in the types of the intermediate variables. Is there a way?<br>
<span class="im HOEnZb"><br>
Software AG – Sitz/Registered office: Uhlandstraße 12, 64297 Darmstadt, Germany – Registergericht/Commercial register: Darmstadt HRB 1562 - Vorstand/Management Board: Karl-Heinz Streibich (Vorsitzender/Chairman), Eric Duffaut, Dr. Wolfram Jost, Arnd Zinnhardt; - Aufsichtsratsvorsitzender/Chairman of the Supervisory Board: Dr. Andreas Bereczky - <a href="http://www.softwareag.com" target="_blank">http://www.softwareag.com</a><br>
<br>
<br>
</span><div class="HOEnZb"><div class="h5">_______________________________________________<br>
Concurrency-interest mailing list<br>
<a href="mailto:Concurrency-interest@cs.oswego.edu">Concurrency-interest@cs.oswego.edu</a><br>
<a href="http://cs.oswego.edu/mailman/listinfo/concurrency-interest" target="_blank">http://cs.oswego.edu/mailman/listinfo/concurrency-interest</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr"><div><span style="border-collapse:separate;color:rgb(0,0,0);font-family:Times;font-variant:normal;letter-spacing:normal;line-height:normal;text-align:-webkit-auto;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;font-size:medium"><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:13.333333969116211px">Cheers,</div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:13.333333969116211px">√</div></span></div></div></div>
</div>