Метод QueueUserWorkItem
Метод QueueUserWorkItem
статический. Снаружи ждут
ManualResetEventSlim.Wait
после Set в делегате.
Sleep для «успеть» не
используют. Обзор пула -
ThreadPool.
Синтаксис
ThreadPool.QueueUserWorkItem(state => { });
Пример
Давайте записать "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"
Пример
Давайте проверить
IsThreadPoolThread
в делегате:
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
Пример
Давайте убедиться, что
Wait вернулся после
Set:
using System;
using System.Threading;
class Program
{
static void Main()
{
using var done = new ManualResetEventSlim(false);
ThreadPool.QueueUserWorkItem(_ => { done.Set(); });
done.Wait();
bool res = done.IsSet;
Console.WriteLine(res);
}
}
Результат выполнения кода:
True
Смотрите также
-
ThreadPool,
класс пула -
CurrentThread,
кто выполняет код -
Join,
ожидание потока -
Thread,
отдельный поток