Yesod中的超时功能

时间:2016-11-16 22:58:46

标签: haskell yesod

我有一个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.
  ...

1 个答案:

答案 0 :(得分:1)

我假设您正在寻找forkHandler