【发布时间】:2015-06-02 21:43:45
【问题描述】:
我有以下代码行,它使用 aeson 序列化 IntMap 并将 JSON 保存到磁盘,全部在子线程上:
import Data.Aeson (encode, toJSON)
import Data.Conduit (($$), (=$), yield)
import qualified Data.ByteString.Lazy as BL (toStrict)
import qualified Data.Conduit.Binary as CB (sinkFile)
import qualified Data.Conduit.List as CL (map)
-- ...
forkIO . runResourceT $ yield (toJSON intMap) $$ CL.map (BL.toStrict . encode) =$ CB.sinkFile file
我想确保这段代码不会被任何异步异常中断。我担心中断可能会导致磁盘上的数据不完整/损坏。
在这种情况下,我可以做些什么来确保不受异步异常的影响?即使main想要终止,是否可以确保允许子线程完成?
谢谢!
【问题讨论】:
-
为确保子线程完成,创建一个
MVar;让子线程在其中放入一些东西,而主线程从中取出。不过,还不足以回答另一半。
标签: multithreading haskell exception asynchronous conduit