Race multiple futures — returns a new Future that resolves/rejects when the first input future completes. Matches C# Future.race() and JS Promise.race().
(Future... futures)
| 68 | * Matches C# Future.race() and JS Promise.race(). |
| 69 | */ |
| 70 | public static Future race(Future... futures) { |
| 71 | Future result = new Future(); |
| 72 | AtomicBoolean settled = new AtomicBoolean(false); |
| 73 | for (Future f : futures) { |
| 74 | f.completableFuture.whenComplete((val, ex) -> { |
| 75 | if (settled.compareAndSet(false, true)) { |
| 76 | if (ex != null) { |
| 77 | result.completableFuture.completeExceptionally(ex); |
| 78 | } else { |
| 79 | result.completableFuture.complete(val); |
| 80 | } |
| 81 | } |
| 82 | }); |
| 83 | } |
| 84 | return result; |
| 85 | } |
| 86 | } |
no outgoing calls