gpt4 book ai didi

macos - 为什么我没有使用此 F# 代码在 OSX 上获得输出,但我在 Windows 上获得了输出

转载 作者:行者123 更新时间:2023-12-03 20:27:38 26 4
gpt4 key购买 nike

我正在尝试在我的 macbook pro 上执行以下 F# 脚本代码使用 FSIvisual studio codeionide插入。

#r "packages/Newtonsoft.Json.9.0.1/lib/net40/Newtonsoft.Json.dll"
#r "System.Net.Http"

open System
open System.Net.Http
open Newtonsoft.Json

let client = new HttpClient()

type AlbumInfo = { userId:int; id:int; title:string }

let url = "https://jsonplaceholder.typicode.com/albums/1"

async {
let! res = Async.AwaitTask <| client.GetAsync(url)
let! content = Async.AwaitTask <| res.Content.ReadAsStringAsync()
let x = JsonConvert.DeserializeObject<AlbumInfo>(content)

printfn "%s" x.title
} |> Async.Start

printfn "Please wait..."

但除了 Please wait... 我没有得到任何输出.然而,当我把 https://jsonplaceholder.typicode.com/albums/1进入浏览器,我得到了预期的 Json回复。所以我知道访问 API 没有问题。

另外,当我在 Visual Studio 2013 中运行相同的代码时在我的 Windows 10个人电脑。代码产生了预期的结果。即 Please wait...title专辑的。

任何想法为什么它不能在我的 macbook 上正常工作?

最佳答案

在 Visual Studio 中,有一个进程托管 FSI 并为 async 保留线程(池)。计算活着。在命令行或 VS Code 上的 FSI 中,FSI 将在主线程完成写入后立即终止 Please wait... (通常是在线程池上开始计算之前)。

如果您想观察 async 的副作用计算你必须等待它的结果(在这个例子中 unit ):

let computation = async {
printfn "Starting async"
let! res = Async.AwaitTask <| client.GetAsync(url)
let! content = Async.AwaitTask <| res.Content.ReadAsStringAsync()
let x = JsonConvert.DeserializeObject<AlbumInfo>(content)
printfn "Downloaded %s" x.title
}

async {
let! started = computation |> Async.StartChild
let! _ = Async.Sleep 1 // only here to get interleaved ouput
printfn "Please wait..."
let! res = started
printfn "Got result %A" res
} |> Async.RunSynchronously

可能会打印:

Starting async
Please wait...
Downloaded quidem molestiae enim
Got result <null>

关于macos - 为什么我没有使用此 F# 代码在 OSX 上获得输出,但我在 Windows 上获得了输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39344073/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com