Я много читал о 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; }
}
С уважением Роберт