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