HttpClient
Files from the Internet must often be accessed. This requires more time due to reduced locality. During this time, a program can perform other tasks.
Class
notesIn C# programs we can use the HttpClient
class
, which makes downloading files on separate threads easier. It helps simplify syntax.
To start, we use the async
and await
keywords. In Main
, we start a task and use DownloadPageAsync
, an async
method, as the target. This method is started—it downloads a web page.
DownloadPageAsync
, we use 3 using
-statements. This helps improve system resource usage.await
keyword twice. We first call GetAsync
and then ReadAsStringAsync
. And finally we display the result string
.using System; using System.Net.Http; using System.Threading.Tasks; class Program { static void Main() { Task t = new Task(DownloadPageAsync); t.Start(); Console.WriteLine("Downloading page..."); Console.ReadLine(); } static async void DownloadPageAsync() { // ... Target page. string page = "http://en.wikipedia.org/"; // ... Use HttpClient. using (HttpClient client = new HttpClient()) using (HttpResponseMessage response = await client.GetAsync(page)) using (HttpContent content = response.Content) { // ... Read the string. string result = await content.ReadAsStringAsync(); // ... Display the result. if (result != null && result.Length >= 50) { Console.WriteLine(result.Substring(0, 50) + "..."); } } } }Downloading page... <!DOCTYPE html> <html lang="en" dir="ltr" class="c...
HttpClient
A network connection uses limited system resources. These can become exhausted with the normal "using" pattern on HttpClient
.
static
HttpClient
may work better in some programs. If you run out of system resources with HttpClient
, try a static
HttpClient
.IDisposable
. But if this causes an error, it can be omitted.using System; using System.Net.Http; using System.Threading.Tasks; class Program { static void Main() { // Run the task. Task.Run(new Action(DownloadPageAsync)); Console.ReadLine(); } static HttpClient _client = new HttpClient(); static async void DownloadPageAsync() { // Use static HttpClient to avoid exhausting system resources for network connections. var result = await _client.GetAsync("http://www.example.com/"); // Write status code. Console.WriteLine("STATUS CODE: " + result.StatusCode); } }STATUS CODE: OK
The functionality of HttpClient
overlaps with WebClient
. The syntax of these two types is different. WebClient
does not currently support the async
and await
syntax.
WebClient
, its "Async" method uses an object token. This is more clumsy.async
and await
are used in the program, the HttpClient
is preferable—it gains compiler checking and improved syntax.HttpClient
provides powerful functionality with better syntax support for newer threading features. It supports the await
keyword.
HttpClient
enables threaded downloads of Internet files with better compiler checking and code validation. It requires newer versions of .NET.