diff --git a/src/Quasar/Awaitable.hs b/src/Quasar/Awaitable.hs
index cfc58f6b3a187310ff0c152a6a2be5023824646d..424f67f2b85596e2a917425ca15d5434f5ea45ec 100644
--- a/src/Quasar/Awaitable.hs
+++ b/src/Quasar/Awaitable.hs
@@ -44,6 +44,7 @@ module Quasar.Awaitable (
   failAsyncVarSTM_,
   putAsyncVarEitherSTM_,
   readAsyncVarSTM,
+  tryReadAsyncVarSTM,
 ) where
 
 import Control.Applicative (empty)
@@ -365,6 +366,9 @@ putAsyncVarEitherSTM (AsyncVar var) = tryPutTMVar var
 readAsyncVarSTM :: AsyncVar a -> STM a
 readAsyncVarSTM (AsyncVar var) = either throwM pure =<< readTMVar var
 
+tryReadAsyncVarSTM :: forall a. AsyncVar a -> STM (Maybe a)
+tryReadAsyncVarSTM (AsyncVar var) = mapM (either throwM pure) =<< tryReadTMVar var
+
 
 putAsyncVar :: MonadIO m => AsyncVar a -> a -> m Bool
 putAsyncVar var = putAsyncVarEither var . Right