2016-02-17 70 views
3

我正在使用播放框架,我讀到Play以非阻塞方式處理每個請求。 那麼Blocking & Scala中的非阻塞未來有什麼區別?Scala中的非阻塞和阻塞未來是什麼?

也請提供有關未來的信息& Await.Result()方法 謝謝!

+1

期貨(3歲,但仍然有效)的初學者友好指南可以在這裏找到:http://danielwestheide.com/blog/2013/01/09/the-neophytes-guide-to-scala- part-8-welcome-to-the-future.html – manub

回答

3

如果Await.Result()Future完成之前的任意時刻被調用,則Future將變爲阻塞狀態。如果您改爲使用onComplete,onSuccess,onFailure,mapflatMap(和其他一些方法),則您正在註冊一個回調函數,該函數在Future返回時將發生。因此,Future是非阻塞的。儘可能使用不阻塞Future的回調函數。

+0

我是Scala的新手。這是否意味着等待會阻止正在執行的線程?我不理解語言「未來變得阻礙」。 –

+0

是的,正在執行的線程被阻塞,直到等待的'Future'完成 – kliew

+0

謝謝。這有幫助。現在我試圖瞭解,除了'Await.result'之外,在未來,即在未來{}內,人們可以在內做些什麼,這會導致(無意中)阻止未來?例如,假設我在內使用Java阻止文件讀取調用。這會導致未來阻塞嗎? –