Прочитать на английском

Поделиться через


ThreadPool.UnsafeQueueUserWorkItem Метод

Определение

Перегрузки

UnsafeQueueUserWorkItem(IThreadPoolWorkItem, Boolean)

Помещает указанный объект рабочего элемента в очередь в пул потоков.

UnsafeQueueUserWorkItem(WaitCallback, Object)

Помещает указанный делегат в очередь пула потоков, но не распространяет вызывающий стек на рабочий поток.

UnsafeQueueUserWorkItem<TState>(Action<TState>, TState, Boolean)

Помещает метод, определенный делегатом Action<T>, в очередь на выполнение и указывает объект, содержащий данные для этого метода. Метод выполняется, когда становится доступен поток из пула потоков.

UnsafeQueueUserWorkItem(IThreadPoolWorkItem, Boolean)

Исходный код:
ThreadPoolWorkQueue.cs
Исходный код:
ThreadPoolWorkQueue.cs
Исходный код:
ThreadPoolWorkQueue.cs

Помещает указанный объект рабочего элемента в очередь в пул потоков.

public:
 static bool UnsafeQueueUserWorkItem(System::Threading::IThreadPoolWorkItem ^ callBack, bool preferLocal);
public static bool UnsafeQueueUserWorkItem(System.Threading.IThreadPoolWorkItem callBack, bool preferLocal);
static member UnsafeQueueUserWorkItem : System.Threading.IThreadPoolWorkItem * bool -> bool
Public Shared Function UnsafeQueueUserWorkItem (callBack As IThreadPoolWorkItem, preferLocal As Boolean) As Boolean

Параметры

callBack
IThreadPoolWorkItem

Рабочий элемент, который вызывается, когда потоку в пуле потоков назначается рабочий элемент.

preferLocal
Boolean

true, чтобы предпочитать ставить рабочий элемент в очередь близко к текущему потоку; false, чтобы предпочитать ставить рабочий элемент в общую очередь пула потоков.

Возвращаемое значение

Значение true, если метод завершается успешно. Если рабочий элемент не удалось поместить в очередь, создается исключение OutOfMemoryException.

Исключения

callback имеет значение null.

Рабочий элемент — Task.

Не удается поместить в очередь рабочий элемент.

Комментарии

Пул потоков вызовет метод рабочего элемента Execute() . Этот рабочий элемент отвечает за распространение ExecutionContext , если это необходимо; пул потоков этого не сделает.

Применяется к

.NET 10 и другие версии
Продукт Версии
.NET Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10

UnsafeQueueUserWorkItem(WaitCallback, Object)

Исходный код:
ThreadPoolWorkQueue.cs
Исходный код:
ThreadPoolWorkQueue.cs
Исходный код:
ThreadPoolWorkQueue.cs

Помещает указанный делегат в очередь пула потоков, но не распространяет вызывающий стек на рабочий поток.

public:
 static bool UnsafeQueueUserWorkItem(System::Threading::WaitCallback ^ callBack, System::Object ^ state);
public static bool UnsafeQueueUserWorkItem(System.Threading.WaitCallback callBack, object? state);
public static bool UnsafeQueueUserWorkItem(System.Threading.WaitCallback callBack, object state);
[System.Security.SecurityCritical]
public static bool UnsafeQueueUserWorkItem(System.Threading.WaitCallback callBack, object state);
static member UnsafeQueueUserWorkItem : System.Threading.WaitCallback * obj -> bool
[<System.Security.SecurityCritical>]
static member UnsafeQueueUserWorkItem : System.Threading.WaitCallback * obj -> bool
Public Shared Function UnsafeQueueUserWorkItem (callBack As WaitCallback, state As Object) As Boolean

Параметры

callBack
WaitCallback

Метод WaitCallback, представляющий делегат, который вызывается, когда потоку в пуле потоков назначается рабочий элемент.

state
Object

Объект, передаваемый делегату при вызове его из пула потоков.

Возвращаемое значение

Значение true, если метод завершается успешно. Если рабочий элемент не удалось поместить в очередь, создается исключение OutOfMemoryException.

Атрибуты

Исключения

У вызывающего объекта отсутствует необходимое разрешение.

Возникла ситуация нехватки памяти.

Не удается поместить в очередь рабочий элемент.

callBack имеет значение null.

Комментарии

QueueUserWorkItem В отличие от метода , UnsafeQueueUserWorkItem не распространяет вызывающий стек на рабочий поток. Это позволяет коду потерять вызывающий стек и тем самым повысить привилегии безопасности.

Внимание!

Использование UnsafeQueueUserWorkItem может непреднамеренно открыть дыру в системе безопасности. Безопасность доступа к коду основывает свои проверки разрешений на разрешениях всех вызывающих объектов в стеке. Если работа помещается в очередь в потоке пула потоков с помощью UnsafeQueueUserWorkItem, стек потока пула потоков не будет иметь контекст фактических вызывающих объектов. Вредоносный код может воспользоваться этим, чтобы избежать проверок разрешений.

См. также раздел

Применяется к

.NET 10 и другие версии
Продукт Версии
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

UnsafeQueueUserWorkItem<TState>(Action<TState>, TState, Boolean)

Исходный код:
ThreadPoolWorkQueue.cs
Исходный код:
ThreadPoolWorkQueue.cs
Исходный код:
ThreadPoolWorkQueue.cs

Помещает метод, определенный делегатом Action<T>, в очередь на выполнение и указывает объект, содержащий данные для этого метода. Метод выполняется, когда становится доступен поток из пула потоков.

public:
generic <typename TState>
 static bool UnsafeQueueUserWorkItem(Action<TState> ^ callBack, TState state, bool preferLocal);
public static bool UnsafeQueueUserWorkItem<TState>(Action<TState> callBack, TState state, bool preferLocal);
static member UnsafeQueueUserWorkItem : Action<'State> * 'State * bool -> bool
Public Shared Function UnsafeQueueUserWorkItem(Of TState) (callBack As Action(Of TState), state As TState, preferLocal As Boolean) As Boolean

Параметры типа

TState

Тип элементов state.

Параметры

callBack
Action<TState>

Делегат, представляющий выполняемый метод.

state
TState

Объект, содержащий данные, используемые методом.

preferLocal
Boolean

true, чтобы предпочитать ставить рабочий элемент в очередь близко к текущему потоку; false, чтобы предпочитать ставить рабочий элемент в общую очередь пула потоков.

Возвращаемое значение

Значение true, если метод успешно помещен в очередь. Если рабочий элемент не может быть помещен очередь, выдается исключение NotSupportedException.

Исключения

callback имеет значение null.

Не удается поместить в очередь рабочий элемент.

Применяется к

.NET 10 и другие версии
Продукт Версии
.NET Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10