F# fsx脚本在异步响应返回之前完成

F# fsx脚本在异步响应返回之前完成,f#,f#-interactive,F#,F# Interactive,我有以下.fsx脚本: #r "packages/FSharp.Data/lib/net40/FSharp.Data.dll" open FSharp.Data async { let! html = Http.AsyncRequestString("http://stackoverflow.com") printfn "%d" html.Length } |> Async.Start 代码是正确的,因为它在fsharpi中按预期工作。我怀疑发生的情况是,脚本在异步响应

我有以下.fsx脚本:

#r "packages/FSharp.Data/lib/net40/FSharp.Data.dll"
open FSharp.Data

async { let! html = Http.AsyncRequestString("http://stackoverflow.com")
        printfn "%d" html.Length }
|> Async.Start

代码是正确的,因为它在
fsharpi
中按预期工作。我怀疑发生的情况是,脚本在异步响应返回之前退出。等待回复的最简单方法是什么

在这种情况下,可以使用
|>异步运行。请参阅专家F#4.0手册的第11章或第11章
Async.Start
对于将结果返回到GUI而不阻塞的函数来说非常有用

?|>Async.RunSynchronousLy要展开@s952163的注释,Async.Start将启动异步任务,但不等待它。在
fsharpi
中,任务完成,因为当前命令运行完成后,
fsharpi
保持活动状态。当您执行脚本时,进程在主线程完成后立即结束(kiiind of,您可以告诉某些类型的线程保持进程打开),这一过程在异步进程启动后立即结束(因为async.Start不等待)。使用Async.RunSynchronously告诉F#不仅要启动异步调用,还要阻塞直到调用完成。@infinitypanda感谢您提供的附加注释!GiantSquid,我把这个贴出来作为答案。