簡體   English   中英

具有Content.ReadAsAsync方法的HttpClient多線程

[英]HttpClient multithreading with Content.ReadAsAsync method

iv大量閱讀了有關HttpClient的內容,並且意識到我不得不更改RestHandler的實現,因為我們為每個請求實例化了一個新的HttpClient對象。 我們對RestHandler使用很多請求(使用HttpClient)。

問題:

  • 我讀過HttpClient上的幾個(全部?)方法是線程安全的,這是否意味着盡管我使用Content.ReadAsAsync,但下面的代碼在線程化方面不會有任何問題?
  • 以這種方式使用HttpClient時是否還有其他已知問題?

現在實現看起來像這樣:

public class RestHandler : IRestHandler
{
    private static readonly HttpClient HttpClient = new HttpClient();

    public RestHandler()
    {
        //HttpClient.DefaultRequestHEaders.Authorization = new AuthenticationHeaderValue(some logic);
        //HttpClient.DefaultRequestHEaders.Add("id","customId");
    }

    public async Task<GenericResult<T>> GetResultAsync<T>(string url) where T : new()
    { 
        var response = await HttpClient.GetAsync(url);

        var result = await response.Content.ReadAsAsync<T>();

        return new GenericResult<T> { HttpResponseMessage = response, Result = result};
    }
}

public interface IRestHandler
{ 
    Task<GenericResult<T>> GetResultAsync<T>(string url) where T : new();
}

public class GenericResult<T> where T : new()
{
    public T Result { get; set; }
    public HttpResponseMessage HttpResponseMessage { get; set; }
}

最好的問候羅伯特

請閱讀以下內容: 您錯誤地使用了httpClient,這破壞了軟件的穩定性

它討論了HttpClient如何真正可重入和線程安全。 這也證明了為什么要在整個應用程序中使用單個HttpClient的情況。

你在做什么對我來說很好。

順便說一句,我個人在使用HttpClient和Mono時遇到了問題。 我們使用RestSharp並更喜歡它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM