Run work asynchronously and compose Futures
Run work asynchronously and compose Futures
Section titled “Run work asynchronously and compose Futures”Canonical source:
protos/examples/concurrency/future-chain.protosat locked revisione99b712ecf658a527b1fe82c8beba2c1286d8dc9.
This executable example is rendered from the exact Protos source consumed by the website. Its program body is copied without modification.
/* * THE LICENSED WORK IS PROVIDED UNDER THE TERMS OF THE ADAPTIVE PUBLIC LICENSE * ("LICENSE") AS FIRST COMPLETED BY: Guillermo Adrián Molina. ANY USE, PUBLIC * DISPLAY, PUBLIC PERFORMANCE, REPRODUCTION OR DISTRIBUTION OF, OR PREPARATION OF * DERIVATIVE WORKS BASED ON, THE LICENSED WORK CONSTITUTES RECIPIENT'S ACCEPTANCE * OF THIS LICENSE AND ITS TERMS, WHETHER OR NOT SUCH RECIPIENT READS THE TERMS OF * THE LICENSE. "LICENSED WORK" AND "RECIPIENT" ARE DEFINED IN THE LICENSE. A COPY * OF THE LICENSE IS LOCATED IN THE TEXT FILE ENTITLED "LICENSE.TXT" ACCOMPANYING * THE CONTENTS OF THIS FILE. */
// Asynchrony belongs to closure execution: future() schedules this closure.initial: (() => { 20 }).future()
// then() always returns another Future and automatically flattens a Future// returned by the transform.doubled: initial.then((value) => { value * 2 })answer: doubled.then((value) => { (() => { value + 2 }).future()})
// value() is the ordinary Future observation/suspension operation.print(answer.value())