Ответ 1
Разница в том, что в верхнем цикле вы создаете 10 общих объектов HttpClient, используя каждый раз, а затем удаляя их, а внизу вы создаете только один HttpClient и повторно используете его.
Цель статьи заключается в том, что она совершенно неэффективна и совершенно ненужна - создавать новый объект HttpClient каждый раз, когда вы хотите сделать вызов веб-службы. Поскольку HttpClient не только многоразовый, но и потокобезопасный, предпочтительным методом является создание одного HttpClient и его повторное использование до тех пор, пока ваша программа не будет выполнена с помощью http-соединений.
Изменить
Похоже, вы спрашивали, почему не это:
using System;
using System.Net.Http;
namespace ConsoleApplication
{
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine("Starting connections");
using (var client = new HttpClient())
{
for(int i = 0; i<10; i++)
{
var result = Client.GetAsync("http://aspnetmonsters.com").Result;
Console.WriteLine(result.StatusCode);
}
}
Console.WriteLine("Connections done");
Console.ReadLine();
}
}
}
В этом конкретном случае нет никакой разницы. Важно то, что HttpClient используется повторно до тех пор, пока не будет выполнен каждый запрос. В большинстве реалистичных сценариев наличие статического свойства для HttpClient имеет наибольшее значение для достижения этой цели.
Причина, по которой они говорят "не использовать использование", заключается в том, что using
подразумевает, что ваш HttpClient является локальной переменной внутри метода, и в большинстве случаев это не то, что вы хотите. В этом конкретном случае каждый HTTP-запрос из программы происходит в одном методе, который вызывается только один раз, поэтому переменная, которая является локальной для этого метода, в порядке: вы получаете один HttpClient, который используется повторно до тех пор, пока все запросы не произойдут, а затем расположены.