1
我有一个IO操作列表,我想同时执行,所以我使用的是async
包中的mapConcurrently
。
我的IO操作包括print
表达式,例如:Haskell async with blocking print
processLink :: String -> IO()
processLink link = do
result <- fetchLink
print $ "Link " ++ link ++ "has been processed"
在我main
我有类似:
main :: IO()
main = do
_ <- mapConcurrently (processLink) links
print "Done!"
一切都在并行精美的执行,但似乎print
中也执行并行字符,所以我在输出中得到垃圾。
我想我明白为什么会发生 - print
一次输出一个字符,所以当它从多个线程执行时,所有输出都是交错的。
什么是解决它的典型方法?
感谢找到重复的问题!请不要回答重复的问题,而是[flag](https://stackoverflow.com/help/privileges/flag-posts)问题并输入重复的链接。如果其他人同意,该问题将被标记为重复。 – Gilles
啊,好的。我想发表评论,但还不能确定,因为它似乎并不强调你可以添加额外的信息,只是它称为主持人,听起来有点可怕。 – Zpalmtree