我想知道,有人可以举例说明如何从Yesod处理程序中启动线程吗?
我想要这样的事情:
用户访问mypage.com/create,这是Yesod路线CreateR
按下页面上的按钮
CreateR的POST处理程序分叉一个新线程,然后将用户重定向到某个“成功”页面。
线程继续在后台运行,改变其他处理程序将访问的STM变量。
我正在使用liftIO,但它崩溃了以下错误:
Exit code: ExitFailure 139
文档说明了有关resourceForkIO的内容,但我无法使这些类型起作用,因为我不知道在哪里/如何使用该函数。
答案 0 :(得分:2)
我一直这样做,特别是对于长时间运行的任务:
liftIO $ forkIO $ customizerJob cnStr env
我不使用ResourceT或任何TVars来交换信息和进度。而是我在db中使用表。非常简单,不需要对haskell monad变换器和STM的神秘知识:)