2011-06-02 36 views
7

Estoy tratando con un recurso de hardware que solo puede manejar 1 comando a la vez. Voy a exponer algunas de sus funciones API a través de una interfaz web, por lo que obviamente hay una gran posibilidad de que se envíen más de un comando a la vez. He decidido que poner en cola estos comandos cuando se envíen es la mejor manera de garantizar el procesamiento en serie.Implementación de cola en C#

Planeo implementar la cola en una clase estática. El código subyacente de la aplicación web agregará un comando llamando a un método correspondiente al comando que desean. Quiero que el método de llamada espere hasta que obtenga el resultado de su comando, por lo que no se requiere magia asíncrona.

  1. ¿Estoy haciendo esto bien? ¿Hay una mejor manera?

  2. ¿Cómo empiezo a implementar la cola en C# (normalmente trabajo con Java)? Asumo que necesitaré algún evento tipo de señalar un trabajo se ha añadido, y un manejador para iniciar el procesamiento de la cola ...

estoy usando .NET Framework 4.

+0

¿Puede modificar su pregunta para aclarar qué versión de .NET está usando? Eso determinará si puede usar ConcurrentQueue (4.0+) o Queue (2.0+). –

Respuesta

10

Puede usar la clase ConcurrentQueue para su implementación y tener un hilo dedicado para procesar elementos en la cola.

Para la parte de espera se puede utilizar un AutoResetEvent, los productores pasan la instancia de eventos para la clase Singleton junto con la solicitud, a continuación, llama WaitOne() que bloquea hasta que el procesador ha dado señales de procesamiento se completa llamando Set().

+0

Parece ser exactamente lo que estaba buscando. ¡Gracias por la ayuda! – uscere90