У меня есть этот код:
Код: Выделить всё
using System.Diagnostics;
namespace ThreadPoolTest
{
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
StartTest();
}
static int count = 0;
static void StartTest()
{
ThreadPool.GetAvailableThreads(out var w, out var c);
ThreadPool.GetMaxThreads(out var mw, out var mc);
Console.WriteLine($"starting --- available {w} max {mw} current {ThreadPool.ThreadCount} completed {ThreadPool.CompletedWorkItemCount} pending {ThreadPool.PendingWorkItemCount}");
int last_print = 0;
var sw = Stopwatch.StartNew();
while (true)
{
ThreadPool.UnsafeQueueUserWorkItem(i =>
{
var _count = Interlocked.Increment(ref count);
Thread.Sleep(1000000000);
int n = 0;
while (true)
{
n++;
Thread.Sleep(1000);
}
},
false);
int _lastCount = count;
if (_lastCount % 30 == 0 && _lastCount != last_print)
{
last_print = _lastCount;
sw.Stop();
ThreadPool.GetAvailableThreads(out w, out c);
ThreadPool.GetMaxThreads(out mw, out mc);
Console.WriteLine($"{sw.Elapsed} --- available {w} max {mw} current {ThreadPool.ThreadCount} completed {ThreadPool.CompletedWorkItemCount} pending {ThreadPool.PendingWorkItemCount}");
sw.Restart();
}
}
}
}
}
примечание: я использовал небезопасную версию в примере, но «безопасная» ведет себя так же, только даже медленнее.
это образец вывода:

Подробнее здесь: https://stackoverflow.com/questions/790 ... w-to-start
Мобильная версия