Java CompletableFutures
を使用して一連の非同期タスクを連鎖させています。コードは次のようなものになります。Javaを `CompletablyFuture.exceptionally`を使用して、オプションで例外を継続します。
CompletableFuture<Result> doTasks(final TaskId id) {
return firstTask.workAsync(id)
.thenComposeAsync(__ -> secondTask.workAsync(id))
.thenComposeAsync(__ -> thirdTask.workAsync(id))
.thenApplyAsync(__ -> fourthTask.workAsync(id));
}
をしかし、firstTask.workAsync
は仕事がすでにこのような状況ではOKである、完了したので、私はちょうどそれを無視してチェーンを続けていきたいと考えていることを示す例外がスローされます。
もちろん、私は例外を扱うことができる別の関数でそのビットをラップすることができますが、CompletableFuture
チェーンでそれを直接処理し、他の例外をすべてスローする方法がありますか?
私はCompletableFuture.exceptionally
を使用することを提案しましたが、私が見ているオンラインの例はすべて役に立たず、ちょうどnullを返します。これはチェーンを殺すようです。この場合、どうすれば使用できますか?
'return CompletableFuture.completedFuture(null)'ではなく 'return null'を意味すると思いますか? –
@JoeC nullを返さないでチェーンを殺す?それは期待通りに動作しますが、タスク2-4を実行したい場合は、CompletableFutureを返す必要はありませんか? – EmptyArsenal
これはシグニチャです: '例外的に(関数 fn)'。したがって、これは 'CompletableFuture >'がある場合にのみ機能します。ヌルを返すとチェーンが停止する理由はありません。 –