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


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 , если это необходимо; пул потоков этого не сделает.

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

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, стек потока пула потоков не будет иметь контекст фактических вызывающих объектов. Вредоносный код может воспользоваться этим, чтобы избежать проверок разрешений.

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

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

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.

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

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