0
import Control.Exception
import System.Timeout
import Control.Concurrent
maskWorker :: IO()
maskWorker = mask_ $ do
threadDelay 10000
putStrLn $ "Return"
uninterruptWorker :: IO()
uninterruptWorker = uninterruptibleMask_ $ do
threadDelay 10000
putStrLn $ "Return"
test :: IO() -> IO()
test worker = do
pid <- forkIO worker
threadDelay 5000
throwTo pid UserInterrupt
threadDelay 15000
putStrLn "The end"
Функция mask_ должна игнорировать асинхронное исключение, пока оно не вернется. Но «test maskWorker» не печатает «Return». Зачем?Функция mask_ прервана асинхронным исключением
Следующие операции гарантируют, что они не будут прерываться: все из Control.Exception, за исключением throwTo ... – highfly22