aba*_*hev 11 f# task-parallel-library c#-to-f# async-await dotnet-httpclient
我是F#的新手,从C#开发人员的角度来理解F#中的异步.假设在C#中使用以下代码段:
var httpClient = new HttpClient();
var response = await httpClient.GetAsync(url);
response.EnsureSuccessStatusCode();
string content = await response.Content.ReadAsStringAsync();
Run Code Online (Sandbox Code Playgroud)
如何在F#中写相同的内容?
Mic*_*sox 18
这是一个应该执行您正在寻找的函数(请注意,您必须将代码包装在异步计算表达式中才能使用let!语法):
let getAsync (url:string) =
async {
let httpClient = new System.Net.Http.HttpClient()
let! response = httpClient.GetAsync(url) |> Async.AwaitTask
response.EnsureSuccessStatusCode () |> ignore
let! content = response.Content.ReadAsStringAsync() |> Async.AwaitTask
return content
}
Run Code Online (Sandbox Code Playgroud)
你可以使用async:
let readString (url: Uri) = async {
let httpClient = new HttpClient();
let! response = httpClient.GetAsync(url) |> Async.AwaitTask
response.EnsureSuccessStatusCode() |> ignore
return! response.Content.ReadAsStringAsync() |> Async.AwaitTask
}
Run Code Online (Sandbox Code Playgroud)