Dispose
После Dispose у
HttpClient
новый запрос бросает ObjectDisposedException.
До закрытия тот же вызов через
заглушку возвращает 200.
Синтаксис
client.Dispose();
Пример
Давайте выполнить GET до закрытия:
using System;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
class Stub : HttpMessageHandler
{
protected override Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request,
CancellationToken cancellationToken)
{
var response = new HttpResponseMessage(HttpStatusCode.OK);
response.Content = new StringContent("abcde");
return Task.FromResult(response);
}
}
class Program
{
static async Task Main()
{
HttpClient client = new HttpClient(new Stub());
HttpResponseMessage response = await client.GetAsync(
"http://abcde.example/");
int res = (int)response.StatusCode;
Console.WriteLine(res);
client.Dispose();
}
}
Результат выполнения кода:
200
Пример
Давайте поймаем исключение после Dispose:
using System;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
class Stub : HttpMessageHandler
{
protected override Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request,
CancellationToken cancellationToken)
{
var response = new HttpResponseMessage(HttpStatusCode.OK);
response.Content = new StringContent("abcde");
return Task.FromResult(response);
}
}
class Program
{
static async Task Main()
{
HttpClient client = new HttpClient(new Stub());
client.Dispose();
try
{
await client.GetAsync("http://abcde.example/");
}
catch (ObjectDisposedException)
{
Console.WriteLine("fail");
}
}
}
Результат выполнения кода:
"fail"
Пример
Давайте закрыть клиент через using:
using System;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
class Stub : HttpMessageHandler
{
protected override Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request,
CancellationToken cancellationToken)
{
var response = new HttpResponseMessage(HttpStatusCode.OK);
response.Content = new StringContent("abcde");
return Task.FromResult(response);
}
}
class Program
{
static async Task Main()
{
using HttpClient client = new HttpClient(new Stub());
string res = await client.GetStringAsync(
"http://abcde.example/");
Console.WriteLine(res);
}
}
Результат выполнения кода:
"abcde"
Смотрите также
-
HttpClient,
класс клиента -
IHttpClientFactory,
фабрика клиентов -
CancelPendingRequests,
отмена запросов -
GetAsync,
запрос GET