首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用超时运行异步计算

使用超时运行异步计算
EN

Stack Overflow用户
提问于 2013-10-09 17:11:04
回答 1查看 174关注 0票数 2

当给出超时参数时,我不理解Async.RunSynchronously的语义。为什么下面的示例不终止?

代码语言:javascript
复制
let runInMaxTime (time: int) (work: Async<'T>) =
    try
        Async.RunSynchronously(work,time)
        |> Some
    with
    | _     ->
        None

let rec forever () : unit  = 
    printfn "Forever looping"
    forever ()

// Never terminates
let x = runInMaxTime 10 <| async {return forever ()}

runInMaxTime的适当实现是什么样子的?我想出的唯一有效方法是基于Task和取消令牌。

EN

回答 1

Stack Overflow用户

发布于 2013-10-09 17:39:04

超时和取消令牌不能任意停止异步计算,它们只能在计算产生结果时才能停止,使用let!do!等。您的示例计算不能这样做。

这会像你期望的那样起作用。

代码语言:javascript
复制
let rec forever () : Async<unit> =
    async {
        printfn "Forever looping"
        return! forever()
    }

let x = runInMaxTime 1000 <| forever()
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19278455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档