Exception Fırlatmak
2 tane yöntem var1 - Eğer supplyAsync() metodu içinde checked exception fırlatılıyorsa bu exception'ı yakalayıp CompletionException olarak tekrar fırlatmak gerekiyor.
2. completeExceptionally() metodu çağrılır
1. CompletionException Fırlatmak
Örnek
Şöyle yaparız
// Some code
CompletableFuture<A> future= CompletableFuture.supplyAsync(() -> {
try {
return someObj.someFunc();
}
catch(ServerException ex) {
throw new CompletionException(ex);
}
});
Daha sonra future.get() veya future.join() çağrılarında bu checked exception'a erişme imkanı var.2. completeExcepitonally() Çağrısı Yapmak
Örnek
Şöyle yaparız.
3 tane yöntem var.
- handle() metodu
- exceptionally() metodu
- whenComplete metodu()
handle metodu
Şöyle yaparız
Örnek
Şöyle yaparız.
Örnek
Şöyle yaparız.
Örnek
Şöyle yaparız.
public static CompletableFuture<Integer> converter(String convertMe) {
CompletableFuture<Integer> future = new CompletableFuture<>();
try {
future.complete(Integer.parseInt(convertMe));
} catch (Exception ex) {
future.completeExceptionally(ex);
}
return future;
}
Exception Olduğunu Anlamak ve Erişmek
1. Future.join()
2. Future.get()
3. supplyAsynch + handle()
4. supplyAsynch + exceptionally()
5. supplyAsynch + whenComplete ()
Future.join() İle Checked Exception'a Erişmek
Örnek
Şöyle yaparız. Burada belki de en güzeli sadece Exception'ı yakalamak ta olabilir. Böylece Supplier unchecked exception fırlatsa bile yakalanabilir.
Şöyle yaparız. Burada belki de en güzeli sadece Exception'ı yakalamak ta olabilir. Böylece Supplier unchecked exception fırlatsa bile yakalanabilir.
Şöyle yaparız. Burada belki de en güzeli sadece Exception'ı yakalamak ta olabilir. Böylece Supplier unchecked exception fırlatsa bile yakalanabilir.
CompletableFuture<A> future = ...;
A resultOfA;
try {
resultOfA = future.join();
}
catch(CompletionException ex) {
...
}
Future.get() İle Checked Exception'a Erişmek
ÖrnekŞöyle yaparız. Burada belki de en güzeli sadece Exception'ı yakalamak ta olabilir. Böylece Supplier unchecked exception fırlatsa bile yakalanabilir.
CompletableFuture<A> future = ...;
A resultOfA;
try {
resultOfA = future.get();
}
catch(Exception ex) {
...
}
supplyAsynch metodu ve exceptionally
Burada future sonucunda exception görmek yerine exception'ı temsil eden bir sonuç döndürülür.3 tane yöntem var.
- handle() metodu
- exceptionally() metodu
- whenComplete metodu()
handle metodu
Şöyle yaparız
CompletableFuture correctHandler = CompletableFuture.supplyAsync(() -> "A")
.thenApply(Integer::parseInt)
.handle((result, ex) -> {
if (null != ex) {
ex.printStackTrace();
return 0;
} else {
System.out.println("HANDLING " + result);
return result;
}
})
.thenAcceptAsync(s -> {
System.out.println("CORRECT: " + s);
});
exceptionally metoduÖrnek
Şöyle yaparız.
CompletableFuture parser = CompletableFuture.supplyAsync(() -> "1")
.thenApply(Integer::parseInt)
.exceptionally(t -> {
t.printStackTrace();
return 0;
})
.thenAcceptAsync(s -> System.out.println("CORRECT value: " + s));
whenComplete metoduÖrnek
Şöyle yaparız.
CompletableFuture correctHandler2 = CompletableFuture.supplyAsync(() -> "A")
.thenApply(Integer::parseInt)
.whenComplete((result, ex) -> {
if (null != ex) {
ex.printStackTrace();
}
})
.thenAcceptAsync(s -> {
System.out.println("When Complete: " + s);
});
Hiç yorum yok:
Yorum Gönder