7

Tôi mới tham gia F # và bị mắc kẹt trong việc hiểu không đồng bộ trong F # từ quan điểm của nhà phát triển C#. Giả sử đoạn mã sau trong C#:Làm thế nào để tiêu thụ HttpClient từ F #?

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

Làm sao để viết giống nhau trong F #?

Trả lời

14

Đây là một chức năng mà nên làm những gì bạn đang tìm kiếm (lưu ý rằng bạn sẽ phải quấn mã trong một biểu thức tính toán không đồng bộ để sử dụng hãy cú pháp):

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

không phải là hai chữ cái đầu tiên '' s 'được' sử dụng 'thay thế? (httpClient & phản hồi là IDisposable) – Cogwheel

6

Bạn có thể sử dụng 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

bạn rất có thể sẽ muốn sử dụng Http.fs nếu bạn đang làm bất cứ điều gì với HttpClient trong F #.

Các vấn đề liên quan