Ste*_*idt 5 scala future async-await
在 Scala 和其他编程语言中,可以使用 Futures 和 Await。
(在实际代码中,会使用例如 zip+map 而不是 Await)
def b1() = Future { 1 }
def b2() = Future { 2 }
def a() = Future {
Await.result(b1(),Duration.inf) + Await.result(b2(),Duration.inf)
}
Run Code Online (Sandbox Code Playgroud)
与 Javascript/Scala 中的Async/Await 有什么区别?
async function b1() { return 1 }
async function b2() { return 3 }
async function a() {
return await b1() + await b2()
}
Run Code Online (Sandbox Code Playgroud)
Await.resultScala 中的“ ”函数是“阻塞的”,这意味着调用线程将暂停,直到等待的 Future 完成,此时它将以返回值恢复。
在高负载的系统中,暂停线程的代价可能很高,因为线程上下文必须保存在内存中,并且可能导致缓存未命中等。由于这个原因,在并发编程中阻塞线程被认为是不好的做法。
async / awaitJavascript 中的语法是非阻塞的。当一个async函数调用“ await”时,它被转换成一个Future,并放入执行队列。当awaitedfuture 完成时,调用函数被标记为准备好执行,它将在稍后的某个时间恢复。重要的区别是在此模型中不需要暂停任何线程。
有许多库async / await在 Scala 中实现了语法,包括https://github.com/scala/scala-async