Использование введенного HttpClient из HttpClientFactory вне области видимости

#c# #asp.net-core #dotnet-httpclient #httpclientfactory

#c# #asp.net-ядро #dotnet-httpclient #httpclientfactory

Вопрос:

Рассмотрим этот код

 public class ScopedService {
    public readonly HttpClient client;
    public readonly MyHostedService hostedService;

    public ScopedService(HttpClient client, MyHostedService hostedService) {
        this.client = client;
        this.hostedService = hostedService;
    }

    public void LongAsyncOperationWeDontWantToWaitFor()
    {
        var httpTask = client.GetAsync("...");
        hostedService.SaveTaskForProcessSometimeInTheFuture(httpTask);
    }
}
 

У меня есть служба с ограниченной областью действия, которая выполняет http-вызов. Я хочу, чтобы область закрывалась до завершения http-вызова. Если бы я создавал и удалял httpClient вручную, то я бы сам сделал это вне области видимости. Но поскольку в этом случае клиенту вводится зависимость, я не могу контролировать, когда он будет удален. Может ли быть ситуация, когда контекст не сможет закрыться, пока введенный httpClient объект не будет удален?

Комментарии:

1. Почему вас волнует жизненный цикл HttpClient ?

Ответ №1:

Вы можете ввести IHttpClientFactory и использовать его для создания HttpClient, когда вам это нужно.

Комментарии:

1. Разве это не то же самое, что вводить HttpClient?

2. Нет, фабрика является одноэлементной, и это означает, что вы можете создавать клиент только тогда, когда вам это нужно, потенциально вне области запроса.

3. Удаление HttpClient, созданного из HttpClientFactory, также не является операцией, поэтому не нужно беспокоиться о его удалении.