我有一个Yesod应用程序,我的数据库中有一个表,其中包含三个可用状态的标志(ToUse,Using,Used),默认为ToUse。
当用户单击按钮时,数据库中的标志变为“使用”,这意味着10分钟后如果标志未更改为“使用”(使另一个用户使用另一个按钮的操作),则该标志将返回ToUSe,问题是搜索我找不到一种方法来延迟编辑我的数据库的操作,我不确定是否有可能在Yesod
搜索我找到timeout库,但如果我理解该库只停止执行程序不要延迟他的开始
我尝试使用Control.Concurrent
但是,得到以下错误
testTimeOut = do
c1 <- atomically $ newTQueue
C.forkIO $ do
C.threadDelay (2 * 1000000)
id <- runDB $ insert $ SubForm "ToUse" 10
atomically $ do
writeTQueue c1 "result 1"
无法匹配预期类型'IO t0' 实际类型为'HandlerT site0 IO(Key SubForm)'
修改
此代码工作形成了我
getFooR :: Handler RepHtml
getFooR = do
runInnerHandler <- handlerToIO
liftIO $ forkIO $ runInnerHandler $ do
Code here runs inside GHandler but on a new thread.
This is the inner GHandler.
...
Code here runs inside the request's control flow.
This is the outer GHandler.
...