Exportar (0) Imprimir
Expandir todo
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

ThreadPool (Clase)

Proporciona un grupo de subprocesos que pueden utilizarse para ejecutar tareas, exponer elementos de trabajo, procesar la E/S asincrónica, esperar en nombre de otros subprocesos y procesar temporizadores.

System.Object
  System.Threading.ThreadPool

Espacio de nombres:  System.Threading
Ensamblado:  mscorlib (en mscorlib.dll)

[HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true, 
	ExternalThreading = true)]
public static class ThreadPool

El tipo ThreadPool expone los siguientes miembros.

  NombreDescripción
Método públicoMiembro estáticoBindHandle(IntPtr) Obsoleto. Enlaza un identificador del sistema operativo a ThreadPool.
Método públicoMiembro estáticoBindHandle(SafeHandle)Enlaza un identificador del sistema operativo a ThreadPool.
Método públicoMiembro estáticoGetAvailableThreadsRecupera la diferencia entre el número máximo de subprocesos de grupo de subprocesos devuelto por el método GetMaxThreads y el número activo actualmente.
Método públicoMiembro estáticoCompatible con XNA FrameworkGetMaxThreadsRecupera el número de solicitudes al grupo de subprocesos que pueden estar activas al mismo tiempo. Todas las solicitudes que pasen de ese número permanecen en la cola hasta que haya subprocesos de grupo de subprocesos disponibles.
Método públicoMiembro estáticoGetMinThreadsRecupera el número mínimo de subprocesos que el grupo de subprocesos crea a petición, según se realizan nuevas solicitudes, antes de la conmutación a un algoritmo para administrar la creación y destrucción de subprocesos.
Método públicoMiembro estáticoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableQueueUserWorkItem(WaitCallback)Pone en cola un método para su ejecución. El método se ejecuta cuando hay un subproceso de grupo de subprocesos disponible.
Método públicoMiembro estáticoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableQueueUserWorkItem(WaitCallback, Object)Pone un método en cola para su ejecución y especifica un objeto que contiene los datos que debe utilizar el método. El método se ejecuta cuando hay un subproceso de grupo de subprocesos disponible.
Método públicoMiembro estáticoRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int32, Boolean)Registra un delegado que va a esperar a una clase WaitHandle, especificando un entero de 32 bits con signo para representar el tiempo de espera en milisegundos.
Método públicoMiembro estáticoRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int64, Boolean)Registra un delegado que va a esperar a una clase WaitHandle, especificando un entero de 64 bits con signo para representar el tiempo de espera en milisegundos.
Método públicoMiembro estáticoRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, TimeSpan, Boolean)Registra un delegado que va a esperar a una clase WaitHandle, especificando un valor de TimeSpan para el tiempo de espera.
Método públicoMiembro estáticoRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, UInt32, Boolean)Registra un delegado que va a esperar a una clase WaitHandle, especificando un entero de 32 bits sin signo para representar el tiempo de espera en milisegundos.
Método públicoMiembro estáticoCompatible con XNA FrameworkSetMaxThreadsEstablece el número de solicitudes al grupo de subprocesos que pueden estar activas al mismo tiempo. Todas las solicitudes que pasen de ese número permanecen en la cola hasta que haya subprocesos de grupo de subprocesos disponibles.
Método públicoMiembro estáticoSetMinThreadsEstablece el número mínimo de subprocesos que el grupo de subprocesos crea a petición, según se realizan nuevas solicitudes, antes de la conmutación a un algoritmo para administrar la creación y destrucción de subprocesos.
Método públicoMiembro estáticoUnsafeQueueNativeOverlappedPone en cola una operación de E/S superpuesta para que se ejecute.
Método públicoMiembro estáticoUnsafeQueueUserWorkItemPone en cola el delegado especificado en el grupo de subprocesos, pero no propaga la pila de llamadas al subproceso de trabajo.
Método públicoMiembro estáticoUnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int32, Boolean)Registra un delegado que va a esperar a una clase WaitHandle, utilizando un entero de 32 bits con signo para representar el tiempo de espera en milisegundos. Este método no propaga la pila de llamadas al subproceso de trabajo.
Método públicoMiembro estáticoUnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int64, Boolean)Registra un delegado que va a esperar a una clase WaitHandle, especificando un entero de 64 bits con signo para representar el tiempo de espera en milisegundos. Este método no propaga la pila de llamadas al subproceso de trabajo.
Método públicoMiembro estáticoUnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, TimeSpan, Boolean)Registra un delegado que va a esperar a una clase WaitHandle, especificando un valor de TimeSpan para el tiempo de espera. Este método no propaga la pila de llamadas al subproceso de trabajo.
Método públicoMiembro estáticoUnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, UInt32, Boolean)Registra un delegado que va a esperar a una clase WaitHandle, especificando un entero de 32 bits sin signo para representar el tiempo de espera en milisegundos. Este método no propaga la pila de llamadas al subproceso de trabajo.
Arriba

Muchas aplicaciones crean subprocesos que pasan mucho tiempo en estado de inactividad, esperando a que se produzca un evento. Otros subprocesos pueden entrar en estado de inactividad y activarse periódicamente para comprobar si se ha producido algún cambio o para actualizar la información de estado. El grupo de subprocesos permite utilizar los subprocesos de forma más eficaz, ya que suministra a la aplicación un grupo de subprocesos de trabajo administrados por el sistema. Los ejemplos de operaciones que usan subprocesos de grupo de subprocesos incluyen los siguientes:

  • Al crear un objeto Task<TResult> o Task para realizar alguna tarea de forma asincrónica, de forma predeterminada la tarea se programa para ejecutarse en un subproceso del grupo de subprocesos.

  • Los temporizadores asincrónicos utilizan el grupo de subprocesos. Los subprocesos del grupo de subprocesos ejecutan devoluciones de llamada desde la clase System.Threading.Timer y generan eventos desde la clase System.Timers.Timer.

  • Al utilizar controladores de espera registrados, un subproceso del sistema supervisa el estado de los controladores de espera. Cuando una operación de espera finaliza, un subproceso de trabajo del grupo de subprocesos ejecuta la función de devolución de llamada correspondiente.

NotaNota

Los subprocesos del grupo de subprocesos administrados son los subprocesos de fondo. Es decir, sus propiedades IsBackground son true. Esto significa que un subproceso ThreadPool no hará que la aplicación se siga ejecutando cuando todos los subprocesos de primer plano hayan terminado.

Nota importanteImportante

Cuando el grupo de subprocesos reutiliza un subproceso, no borra los datos del almacenamiento local de subprocesos ni de los campos marcados con el atributo ThreadStaticAttribute. Por tanto, cuando un método examina almacenamiento local de subprocesos o campos que están marcadas con el atributo ThreadStaticAttribute , los valores que encuentra podrían dejar encima de un uso anterior del subproceso ThreadPool.

También pueden colocarse en la cola del grupo de subprocesos elementos de trabajo no relacionados con una operación de espera. Para solicitar que un subproceso del grupo de subprocesos controle un elemento de trabajo, hay que llamar al método QueueUserWorkItem. Este método toma como parámetro una referencia al método o delegado al que llamará el subproceso seleccionado del grupo de subprocesos. No se puede cancelar un elemento de trabajo después de haberlo colocado en la cola.

Los temporizadores de la cola de temporizadores y las operaciones de espera registradas también utilizan el grupo de subprocesos. Sus funciones de devolución de llamada se colocan en la cola del grupo de subprocesos.

Hay un grupo de subprocesos por proceso. A partir de .NET Framework 4, el tamaño predeterminado del grupo de subprocesos de un proceso depende de varios factores, como el tamaño del espacio de direcciones virtuales. Un proceso puede llamar al método GetMaxThreads para determinar el número de subprocesos. El número de subprocesos del grupo de subprocesos se puede cambiar mediante el método SetMaxThreads. Cada subproceso utiliza el tamaño de pila predeterminado y se ejecuta con la prioridad predeterminada.

NotaNota

El código no administrado que hospeda .NET Framework puede cambiar el tamaño del grupo de subprocesos mediante la función CorSetMaxThreads definida en el archivo mscoree.h.

El grupo de subprocesos proporciona nuevos subprocesos de trabajo o subprocesos de finalización de E/S a petición hasta que alcanza el mínimo para cada categoría. Cuando se alcanza un valor mínimo, el grupo de subprocesos puede crear subprocesos adicionales en esa categoría o esperar hasta que se completen algunas tareas. A partir de .NET Framework 4, el grupo de subprocesos crea y destruye los subprocesos de trabajo para optimizar el rendimiento, que se define como el número de tareas completadas por unidad de tiempo. Es posible que si hay muy pocos subprocesos, no se haga un uso óptimo de los recursos disponibles, mientras que demasiados subprocesos podrían aumentar la contención de recursos.

NotaNota

Cuando la petición es baja, el número real de subprocesos del grupo de subprocesos puede situarse por debajo de los valores mínimos.

Puede usar el método GetMinThreads para obtener estos valores mínimos.

Nota de precauciónPrecaución

Puede usar el método SetMinThreads para aumentar el número mínimo de subprocesos. Sin embargo, si estos valores se incrementan innecesariamente, pueden producirse problemas de rendimiento. Si se inician demasiadas tareas al mismo tiempo, puede parecer que todas se ejecutan con lentitud. En la mayoría de los casos, el grupo de subprocesos funcionará mejor con su propio algoritmo de asignación de subprocesos.

NotaNota

El atributo HostProtectionAttribute aplicado a este tipo o miembro tiene el valor de propiedad Resources siguiente: Synchronization | ExternalThreading. El atributo HostProtectionAttribute no afecta a las aplicaciones de escritorio (que normalmente se inician haciendo doble clic en un icono, escribiendo un comando o introduciendo una dirección URL en el explorador). Para obtener más información, vea la clase HostProtectionAttribute o Programación en SQL Server y atributos de protección de host.

TopicLocation
Cómo: Crear un controlador HTTP asincrónicoGenerar aplicaciones Web ASP .NET
Cómo: Crear un controlador HTTP asincrónicoGenerar aplicaciones Web ASP .NET en Visual Studio


using System;
using System.Threading;
public class Example {
    public static void Main() {
        // Queue the task.
        ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadProc));

        Console.WriteLine("Main thread does some work, then sleeps.");
        // If you comment out the Sleep, the main thread exits before
        // the thread pool task runs.  The thread pool uses background
        // threads, which do not keep the application running.  (This
        // is a simple example of a race condition.)
        Thread.Sleep(1000);

        Console.WriteLine("Main thread exits.");
    }

    // This thread procedure performs the task.
    static void ThreadProc(Object stateInfo) {
        // No state object was passed to QueueUserWorkItem, so 
        // stateInfo is null.
        Console.WriteLine("Hello from the thread pool.");
    }
}


.NET Framework

Compatible con: 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Compatible con: 4, 3.5 SP1

Biblioteca de clases portable

Compatible con: Biblioteca de clases portable

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (no se admite el rol Server Core), Windows Server 2008 R2 (se admite el rol Server Core con SP1 o versiones posteriores; no se admite Itanium)

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

Este tipo es seguro para la ejecución de subprocesos.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft