From b7125001d905feee9ca71c5e6ff485b9d539b5e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Grubbstr=C3=B6m=20=28Grubba=29?= <grubba@grubba.org> Date: Sun, 8 Sep 2019 13:25:23 +0200 Subject: [PATCH] Concurrent.Future: Added try_get(). --- lib/modules/Concurrent.pmod | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/lib/modules/Concurrent.pmod b/lib/modules/Concurrent.pmod index a78730beb9..1a4b65a7ea 100644 --- a/lib/modules/Concurrent.pmod +++ b/lib/modules/Concurrent.pmod @@ -163,7 +163,7 @@ class Future //! Wait for fulfillment. //! //! @seealso - //! @[get()] + //! @[get()], @[try_get()] this_program wait() { if (state <= STATE_PENDING) { @@ -182,7 +182,7 @@ class Future //! Throws on rejection. //! //! @seealso - //! @[wait()] + //! @[wait()], @[try_get()] mixed get() { wait(); @@ -193,6 +193,28 @@ class Future return result; } + //! Return the value if available. + //! + //! @returns + //! Returns @[UNDEFINED] if the @[Future] is not yet fulfilled. + //! + //! @throws + //! Throws on rejection. + //! + //! @seealso + //! @[wait()] + mixed try_get() + { + switch(state) { + case ..STATE_PENDING: + return UNDEFINED; + case STATE_REJECTED..: + throw(result); + default: + return result; + } + } + //! Register a callback that is to be called on fulfillment. //! //! @param cb -- GitLab