ThreadPool
ThreadPool статический.
Работу ставят через
QueueUserWorkItem.
Завершение ждут через
ManualResetEventSlim, не
через Sleep.
Отдельный Thread -
Thread.
Синтаксис
ThreadPool.QueueUserWorkItem(callback);
Пример
Давайте дождаться записи
"abcde" из пула:
using System;
using System.Threading;
class Program
{
static void Main()
{
string text = "";
using var done = new ManualResetEventSlim(false);
ThreadPool.QueueUserWorkItem(_ =>
{
text = "abcde";
done.Set();
});
done.Wait();
string res = text;
Console.WriteLine(res);
}
}
Результат выполнения кода:
"abcde"
Пример
Давайте проверить флаг пула внутри делегата:
using System;
using System.Threading;
class Program
{
static void Main()
{
bool fromPool = false;
using var done = new ManualResetEventSlim(false);
ThreadPool.QueueUserWorkItem(_ =>
{
fromPool = Thread.CurrentThread.IsThreadPoolThread;
done.Set();
});
done.Wait();
bool res = fromPool;
Console.WriteLine(res);
}
}
Результат выполнения кода:
True
Пример
Давайте сравнить Main
и пул:
using System;
using System.Threading;
class Program
{
static void Main()
{
bool mainIsPool = Thread.CurrentThread.IsThreadPoolThread;
Console.WriteLine(mainIsPool);
}
}
Результат выполнения кода:
False
Смотрите также
-
QueueUserWorkItem,
постановка работы -
CurrentThread,
флаг пула -
Join,
ожиданиеThread -
Thread,
свой поток