我收到了一系列网络请求,每次请求大于10秒 为了让用户知道发生了什么,我给出了更新:
main = do putStr "Downloading the first thing... "
{- Net request -}
putStrLn "DONE"
putStr "Downloading the second thing... "
{- Net request -}
putStrLn "DONE"
使用GHCi,这可以按预期工作,但是编译或使用runghc,“下载”不会打印直到“完成”。
我用(>> =)和(>>)重写了它,但我遇到了同样的问题。
发生了什么事?
答案 0 :(得分:16)
这里的问题不在于执行顺序。语句按照您期望的顺序执行。问题在于,由于缓冲,您实际上不会在结果发生时立即看到结果。
默认情况下,终端IO是行缓冲的。这意味着在打印换行符或刷新缓冲区之前,屏幕上不会显示任何输出。因此,您需要在执行putStr
后使用hFlush
刷新'输出流,或者您需要使用hSetBuffering
更改stdout的缓冲模式以不使用行缓冲。