ThreadPool.UnsafeQueueUserWorkItem Метод

Определение

Перегрузки

UnsafeQueueUserWorkItem(IThreadPoolWorkItem, Boolean)

Помещает указанный объект рабочего элемента в очередь в пул потоков.Queues the specified work item object to the thread pool.

UnsafeQueueUserWorkItem(WaitCallback, Object)

Помещает указанный делегат в очередь пула потоков, но не распространяет вызывающий стек на рабочий поток.Queues the specified delegate to the thread pool, but does not propagate the calling stack to the worker thread.

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

Помещает метод, определенный делегатом Action<T>, в очередь на выполнение и указывает объект, содержащий данные для этого метода.Queues a method specified by an Action<T> delegate for execution, and specifies an object containing data to be used by the method. Метод выполняется, когда становится доступен поток из пула потоков.The method executes when a thread pool thread becomes available.

UnsafeQueueUserWorkItem(IThreadPoolWorkItem, Boolean)

Помещает указанный объект рабочего элемента в очередь в пул потоков.Queues the specified work item object to the thread pool.

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

Рабочий элемент, который вызывается, когда потоку в пуле потоков назначается рабочий элемент.The work item to invoke when a thread in the thread pool picks up the work item.

preferLocal
Boolean

true, чтобы предпочитать ставить рабочий элемент в очередь близко к текущему потоку; false, чтобы предпочитать ставить рабочий элемент в общую очередь пула потоков.true to prefer queueing the work item in a queue close to the current thread; false to prefer queueing the work item to the thread pool's shared queue.

Возвраты

Значение true, если метод завершается успешно. Если рабочий элемент не удалось поместить в очередь, создается исключение OutOfMemoryException.true if the method succeeds; OutOfMemoryException is thrown if the work item could not be queued.

Исключения

callbacknull.callback is null.

Рабочий элемент — Task.The work item is a Task.

Не удается поместить в очередь рабочий элемент.The work item could not be queued.

Комментарии

Пул потоков вызовет метод Execute() рабочего элемента.The thread pool will invoke the work item's Execute() method. Этот рабочий элемент отвечает за распространение ExecutionContext, если это необходимо; пул потоков не сделает этого.It is the responsibility of that work item to propagate ExecutionContext if it's needed; the thread pool will not do so.

UnsafeQueueUserWorkItem(WaitCallback, Object)

Помещает указанный делегат в очередь пула потоков, но не распространяет вызывающий стек на рабочий поток.Queues the specified delegate to the thread pool, but does not propagate the calling stack to the worker thread.

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

Параметры

callBack
WaitCallback

Метод WaitCallback, представляющий делегат, который вызывается, когда потоку в пуле потоков назначается рабочий элемент.A WaitCallback that represents the delegate to invoke when a thread in the thread pool picks up the work item.

state
Object

Объект, передаваемый делегату при вызове его из пула потоков.The object that is passed to the delegate when serviced from the thread pool.

Возвраты

Значение true, если метод завершается успешно. Если рабочий элемент не удалось поместить в очередь, создается исключение OutOfMemoryException.true if the method succeeds; OutOfMemoryException is thrown if the work item could not be queued.

Атрибуты

Исключения

У вызывающего объекта отсутствует необходимое разрешение.The caller does not have the required permission.

Возникла ситуация нехватки памяти.An out-of-memory condition was encountered.

Не удается поместить в очередь рабочий элемент.The work item could not be queued.

callBacknull.callBack is null.

Комментарии

В отличие от метода QueueUserWorkItem, UnsafeQueueUserWorkItem не распространяет вызывающий стек в рабочий поток.Unlike the QueueUserWorkItem method, UnsafeQueueUserWorkItem does not propagate the calling stack to the worker thread. Это позволяет коду потерять вызывающий стек и тем самым повысить привилегии безопасности.This allows code to lose the calling stack and thereby to elevate its security privileges.

Внимание!

Использование UnsafeQueueUserWorkItem может случайно открыть брешь в системе безопасности.Using UnsafeQueueUserWorkItem could inadvertently open up a security hole. Управление доступом для кода основывается на проверке разрешений всех вызывающих объектов в стеке.Code access security bases its permission checks on the permissions of all the callers on the stack. Когда работа помещается в очередь потока пула потоков с помощью UnsafeQueueUserWorkItem, стек потока пула потоков не будет иметь контекста фактических вызывающих объектов.When work is queued on a thread pool thread using UnsafeQueueUserWorkItem, the stack of the thread pool thread will not have the context of the actual callers. Вредоносный код может использовать эту возможность, чтобы избежать проверок разрешений.Malicious code might be able exploit this to avoid permission checks.

Безопасность

SecurityCriticalAttribute
Требуется полное доверие для немедленного вызывающего объекта.Requires full trust for the immediate caller. Этот член не может использоваться частично доверенным или прозрачным кодом.This member cannot be used by partially trusted or transparent code.

Дополнительно

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

Помещает метод, определенный делегатом Action<T>, в очередь на выполнение и указывает объект, содержащий данные для этого метода.Queues a method specified by an Action<T> delegate for execution, and specifies an object containing data to be used by the method. Метод выполняется, когда становится доступен поток из пула потоков.The method executes when a thread pool thread becomes available.

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.The type of elements of state.

Параметры

callBack
Action<TState>

Делегат, представляющий выполняемый метод.A delegate representing the method to execute.

state
TState

Объект, содержащий данные, используемые методом.An object containing data to be used by the method.

preferLocal
Boolean

true, чтобы предпочитать ставить рабочий элемент в очередь близко к текущему потоку; false, чтобы предпочитать ставить рабочий элемент в общую очередь пула потоков.true to prefer queueing the work item in a queue close to the current thread; false to prefer queueing the work item to the thread pool's shared queue.

Возвраты

Значение true, если метод успешно помещен в очередь. Если рабочий элемент не может быть помещен очередь, выдается исключение NotSupportedException.true if the method is successfully queued; NotSupportedException is thrown if the work item could not be queued.

Исключения

Свойство callback имеет значение null.callback is null.

Не удается поместить в очередь рабочий элемент.The work item could not be queued.

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