7

Ich bin neu in F # und habe das Verständnis von async in F # aus der Perspektive eines C# -Entwicklers beibehalten. Angenommen, Sie haben folgendes Code-Snippet in C#:Wie verwende ich HttpClient von F #?

var httpClient = new HttpClient(); 
var response = await httpClient.GetAsync(url); 
response.EnsureSuccessStatusCode(); 
string content = await response.Content.ReadAsStringAsync(); 

Wie schreibe ich dasselbe in F #?

Antwort

14

Hier ist eine Funktion, die tun sollten, was Sie suchen (beachten Sie, dass Sie den Code in einem asynchronen Berechnungsausdruck um werden müssen wickeln die verwenden lassen Syntax):

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 
    } 
+2

sollten nicht die ersten beiden "Let's Be'' stattdessen verwendet werden? (httpClient & Antwort ist IDisposable) – Cogwheel

6

können Sie async verwenden:

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 
} 
6

Sie wahrscheinlich Http.fs verwenden möchten werden, wenn Sie mit HttpClient in F # etwas zu tun.