module Temporal.Common.Async where

import GHC.Conc (labelThread)
import UnliftIO
import UnliftIO.Concurrent


asyncLabelled :: MonadUnliftIO m => String -> m a -> m (Async a)
asyncLabelled :: forall (m :: * -> *) a.
MonadUnliftIO m =>
String -> m a -> m (Async a)
asyncLabelled String
label m a
action = m a -> m (Async a)
forall (m :: * -> *) a. MonadUnliftIO m => m a -> m (Async a)
async (m a -> m (Async a)) -> m a -> m (Async a)
forall a b. (a -> b) -> a -> b
$ do
  asyncId <- m ThreadId
forall (m :: * -> *). MonadIO m => m ThreadId
myThreadId
  liftIO $ labelThread asyncId label
  action


forkIOLabelled :: MonadUnliftIO m => String -> m () -> m ThreadId
forkIOLabelled :: forall (m :: * -> *).
MonadUnliftIO m =>
String -> m () -> m ThreadId
forkIOLabelled String
label m ()
action = m () -> m ThreadId
forall (m :: * -> *). MonadUnliftIO m => m () -> m ThreadId
UnliftIO.Concurrent.forkIO (m () -> m ThreadId) -> m () -> m ThreadId
forall a b. (a -> b) -> a -> b
$ do
  asyncId <- m ThreadId
forall (m :: * -> *). MonadIO m => m ThreadId
myThreadId
  liftIO $ labelThread asyncId label
  action