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