Yesod中的超时功能

timeout function in Yesod

我有一个 Yesod 应用程序,在我的数据库中有一个 table,带有三个可能状态(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" 

Couldn't match expected type ‘IO t0’ with actual type ‘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.
  ...

我假设您正在寻找 forkHandler