Make Concurrent Requests in C#
By Josselin Liebe
Here’s how you can perform concurrent HTTP requests in C# using HttpClient and Task.WhenAll to handle multiple requests asynchronously.
Here’s the C# code:
using System;
using System.Net.Http;
using System.Threading.Tasks;
using System.Collections.Generic;
class Program
{
private static readonly HttpClient client = new HttpClient();
static async Task SendRequest(string query)
{
try
{
string url = "https://piloterr.com/api/v2/website/crawler";
string xApiKey = "YOUR-X-API-KEY";
string fullUrl = $"{url}?x_api_key={Uri.EscapeDataString(xApiKey)}&query={Uri.EscapeDataString(query)}";
Console.WriteLine($"Sending request to {query}");
HttpResponseMessage response = await client.GetAsync(fullUrl);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine($"Response from {query}:\n{responseBody}");
}
catch (HttpRequestException e)
{
Console.WriteLine($"Request to {query} failed: {e.Message}");
}
}
static async Task ScrapeConcurrently(List<string> urls)
{
var tasks = new List<Task>();
foreach (string url in urls)
{
tasks.Add(SendRequest(url));
}
await Task.WhenAll(tasks);
Console.WriteLine("Process Ended");
}
static async Task Main(string[] args)
{
var urlsToScrape = new List<string>
{
"https://www.piloterr.com",
"https://www.piloterr.com/blog"
};
await ScrapeConcurrently(urlsToScrape);
}
}Explanation:
HttpClient: Used for making HTTP requests. It’s recommended to instantiate
HttpClientonce and reuse it for better performance.Task.WhenAll: Runs all the tasks concurrently and waits for all of them to complete. Each request is represented by a
Taskreturned by theSendRequestmethod.async/await: Used to handle asynchronous operations in a clear and non-blocking way.
How to Use:
Replace
"YOUR-X-API-KEY"with your actual API key.Modify the
urlsToScrapelist to include the URLs you want to scrape.
Benefits:
Using asynchronous programming and
Task.WhenAll, you can efficiently run multiple HTTP requests concurrently, improving performance.This approach scales easily for handling a large number of URLs.
This C# example provides a simple and effective way to handle concurrent HTTP requests, making it suitable for scenarios where performance is crucial.
Was this helpful?