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