93 |
|
* Returns the "raw" internal exceptional completion of f, |
94 |
|
* without any additional wrapping with CompletionException. |
95 |
|
*/ |
96 |
< |
<U> Throwable exceptionalCompletion(CompletableFuture<U> f) { |
97 |
< |
// handle (and whenComplete) can distinguish between "direct" |
98 |
< |
// and "wrapped" exceptional completion |
99 |
< |
return f.handle((U u, Throwable t) -> t).join(); |
96 |
> |
Throwable exceptionalCompletion(CompletableFuture<?> f) { |
97 |
> |
// handle (and whenComplete and exceptionally) can distinguish |
98 |
> |
// between "direct" and "wrapped" exceptional completion |
99 |
> |
return f.handle((u, t) -> t).join(); |
100 |
|
} |
101 |
|
|
102 |
|
void checkCompletedExceptionally(CompletableFuture<?> f, |
3693 |
|
public void testCompleteAsync2() { |
3694 |
|
CompletableFuture<Integer> f = new CompletableFuture<>(); |
3695 |
|
CFException ex = new CFException(); |
3696 |
< |
f.completeAsync(() -> {if (true) throw ex; return 1;}); |
3696 |
> |
f.completeAsync(() -> { throw ex; }); |
3697 |
|
try { |
3698 |
|
f.join(); |
3699 |
|
shouldThrow(); |
3723 |
|
CompletableFuture<Integer> f = new CompletableFuture<>(); |
3724 |
|
CFException ex = new CFException(); |
3725 |
|
ThreadExecutor executor = new ThreadExecutor(); |
3726 |
< |
f.completeAsync(() -> {if (true) throw ex; return 1;}, executor); |
3726 |
> |
f.completeAsync(() -> { throw ex; }, executor); |
3727 |
|
try { |
3728 |
|
f.join(); |
3729 |
|
shouldThrow(); |