hvt*_*vth 5 java exception-handling optional java-8 completable-future
假设我们正在调用一个缓慢的远程服务来获得String
响应。为此,我们调用了一个如下所示的方法:
public CompletableFuture<String> getSlowly(String param) {...}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我们也知道我们知道该服务在我们调用它的 20% 的时间内不会返回有用的响应。因此,在我们调用的 20% 的情况下,getSlowly
我们会得到一个异常完整的未来,并带有一些包装异常。意思是,我们将catch
在以下调用的块中结束:
try {
String response = getSlowly("some input").join();
doSomething(response); // 80% succeed
catch (Exception e) {
LOG.warn("Couldn't get response. Too bad."); // 20% fail
}
Run Code Online (Sandbox Code Playgroud)
这个调用并不重要,我们的应用程序可以优雅地处理丢失的响应。但是,每当我们设法成功获得响应时,我们确实希望使用响应。
因为我们知道这种失败会经常发生,即我们确实预料到了,将这 20% 的调用视为例外是否有意义?
不将 20% 视为例外的一种方法是将 的实现更改为getSlowly
以下内容:
public CompletableFuture<Optional<String>> getSlowly(String param) {...}
Run Code Online (Sandbox Code Playgroud)
这看起来很笨拙。
有没有一种惯用的方式来处理这种脆弱的 CompletableFutures?当缺少返回值时,我们应该将其视为异常状态,还是应该返回可选项(或类似的自定义对象)?
归档时间: |
|
查看次数: |
544 次 |
最近记录: |