
Hi, I think you're looking for Concurrently:
https://hackage.haskell.org/package/async-2.2.2/docs/Control-Concurrent-Asyn...
On Wed, Mar 18, 2020 at 4:52 AM Michael Hull
Hi, I am currently learning Haskell, and really enjoying it, thankyou to the community for this well considered language. I have started using the async library, and I can't quite figure out some of the documentation, and I wonder if someone could help.
https://hackage.haskell.org/package/async-2.2.2/docs/Control-Concurrent-Asyn...
Makes the comment that: "This is a useful variant of async https://hackage.haskell.org/package/async-2.2.2/docs/Control-Concurrent-Asyn... that ensures an Async is never left running unintentionally." However, I can't see how I would use this.
To make the example more concrete, I have a function that looks like this:
runNodeHwBridgeUdp :: NodeHwInterface -> NodeHwUdpConfig-> IO() runNodeHwBridgeUdp (NodeHwInterface l0up l0down) config = do putStrLn "Starting Node bridge"
-- Launch all the subprocesses: t0 <- async $ (runMsgUpReader hwBridgeSharedData l0up) t1 <- async $ (evalStateT (runUDPWriter hwBridgeSharedData) (initialUdpDispatchData timeUs) ) t2 <- async $ (runUDPReader hwBridgeSharedData l0down)
putStrLn "Created child processes. Waiting...." (a, is_exception) <- waitAnyCatchCancel [t0, t1, t2]
case is_exception of Right _ -> do error "SHOULD NOT GET HERE" Left exception -> do case (fromException exception) of Just (ex :: HwDestroyException) -> do putStrLn $ "BRIDGE ENDING: >>>> GOOD: SHUTDOWN: " ++ show exception Nothing -> do throwIO exception return ()
This process launches 3 child processes, and then waits on them. I launch this function as an async-process, and it would be really helpful if when I "cancel"ed it, it would also also cancelled the children, but I don't understand how I would structure that...
t0 <- withAsync $ (runMsgUpReader hwBridgeSharedData l0up) $ \async -> do ???? t1 <- withAsync $ (evalStateT (runUDPWriter hwBridgeSharedData) (initialUdpDispatchData timeUs) ) $ \async -> do ???? t2 <- async $ (runUDPReader hwBridgeSharedData l0down) $ \async -> do ????
I feel like I must be missing something here. I'd appreciate any input; many thanks for your time,
Mike
_______________________________________________ Haskell-Cafe mailing list To (un)subscribe, modify options or view archives go to: http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe Only members subscribed via the mailman list are allowed to post.