Java中的异步等待
編寫異步代碼很困難。 試圖了解異步代碼應該做什么的難度更大。 承諾是嘗試描述延遲執行流程的一種常見方式:首先做一件事,然后再做另一件事,以防萬一出錯再做其他事情。
在許多語言中,承諾已成為協調異步行為的事實上的方法。 Java 8終于有了該程序,并引入了CompletableFuture; 盡管很認真,但誰設計了API? 一團糟 !
許諾的麻煩在于,控制流程可能變得非常簡單。 隨著控制流程變得越來越復雜,幾乎變得難以理解(執行此操作,然后,除非是星期三,否則,請執行此操作,如果有錯誤,請返回三個空格,yada yada yada)。
很酷的孩子們已經開始使用異步…等待。 C#擁有它。 JavaScript有它。 現在……現在,通過EA的一些大才能,Java擁有了它! 是的,Java具有可用的async ... await構造,而無需更改語言!
一個簡單的例子:我們可以使用CompletableFuture編寫幾個異步操作,如下所示:
private static void theOldWay() {doAThing().thenCompose(Main::doAnotherThing).thenAccept(Main::reportSuccess).exceptionally(Main::reportFailure); }這應該很簡單,通常使用期貨代碼與這個簡單代碼相去甚遠。 但是,借助EA異步等待的魔力,我們可以像這樣重新編寫它:
private static CompletableFuture<Void> theNewWay() {try {String intermediate = await(doAThing());String result = await(doAnotherThing(intermediate));reportSuccess(result);} catch (Throwable t) {reportFailure(t);}return completedFuture(null); }它看起來像同步代碼。 但是對Async.await的調用是神奇的。 這些調用被重新編寫(在運行時或構建時,如您所愿),以使調用無阻塞!
該代碼更易于編寫,易于閱讀,易于調試一百萬倍,最重要的是它可以自然擴展。 隨著代碼變得越來越復雜,您可以使用常規的重構工具來控制它。 使用CompletableFutures,您最終會繞過所有這些將來的對象,并且在某個地方,有一天您會錯過代碼路徑和繁榮! 生產中的一個免費錯誤。
因此,即使您堅持使用Java,您仍然可以像酷孩子一樣使用async…await!
翻譯自: https://www.javacodegeeks.com/2018/02/async-await-java.html
總結
以上是生活随笔為你收集整理的Java中的异步等待的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑系统默认的图标(电脑桌面默认图标)
- 下一篇: 手机格式化是什么意思(苹果手机格式化是什