【发布时间】:2017-11-04 00:35:07
【问题描述】:
我有一个我想要同时执行的 IO 操作列表,所以我使用来自async 包的mapConcurrently。
我的 IO 操作包括 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 一次输出一个字符,所以当它从多个线程执行时,所有输出都是交错的。
解决这个问题的典型方法是什么?
【问题讨论】:
标签: haskell concurrency synchronization