using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
private static readonly IHttpClientFactory _clientFactory = new ServiceCollection().AddHttpClient().BuildServiceProvider().GetService<IHttpClientFactory>();
static string CurrentTime() => DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss.fff");
public static async Task<bool> ProcessValue(int item)
Console.WriteLine($"{CurrentTime()} Thread: {Thread.CurrentThread.ManagedThreadId.ToString().PadLeft(6, '0')} - {item.ToString().PadLeft(3, '0')}.");
HttpRequestMessage requestMessage = new(HttpMethod.Get, "https://postman-echo.com/get");
HttpClient httpClient = _clientFactory.CreateClient();
HttpResponseMessage responseMessage = await httpClient.SendAsync(requestMessage);
Console.WriteLine($"{CurrentTime()} Thread: {Thread.CurrentThread.ManagedThreadId.ToString().PadLeft(6, '0')} - {item.ToString().PadLeft(3, '0')} - {responseMessage.StatusCode}.");
public static void Main()
ThreadPool.GetMaxThreads(out workerThreads, out portThreads);
Console.WriteLine($"{CurrentTime()} Thread: {Thread.CurrentThread.ManagedThreadId.ToString().PadLeft(6, '0')} - Start. ThreadLimit: {ThreadLimit}, workerThreads: {workerThreads}, portThreads: {portThreads}.");
for(int i = 0; i < 100; i++)
List<Task> tasks = new();
tasks.Add(ProcessValue(item));
if(tasks.Count >= ThreadLimit)
Task.WaitAll(tasks.ToArray());
Console.WriteLine($"{CurrentTime()} Thread: {Thread.CurrentThread.ManagedThreadId.ToString().PadLeft(6, '0')} - Done.");