7

मैं एफ # के लिए नया हूं और सी # डेवलपर के परिप्रेक्ष्य से एफ # में एसिंक को समझने में फंस गया हूं। सी #:F # से HttpClient का उपभोग कैसे करें?

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

में निम्नलिखित स्निपेट होने का कहें F # में इसे कैसे लिखें?

उत्तर

14

यहाँ एक समारोह है कि आप के लिए (ध्यान दें कि उपयोग करने के लिए एक अतुल्यकालिक गणना अभिव्यक्ति में कोड रैप करने के लिए होगा जो खोज रहे हैं क्या करना चाहिए है जाने सिंटेक्स):

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

पहले दो 'चलिए' का उपयोग नहीं करना चाहिए? (httpClient और प्रतिक्रिया IDisposable है) – Cogwheel

6

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

आप की संभावना आप एफ # में HttpClient के साथ कुछ भी कर रहे हैं Http.fs का उपयोग करना चाहेंगे।

संबंधित मुद्दे