Estoy desarrollando una aplicación de formularios para Windows (C#), y mientras el programa se está ejecutando, crea objetos y los agrega a una lista. Tengo que procesar los elementos en la lista, con FIFO (primero en entrar primero en salir). Quiero hacer esto en un hilo de antecedentes y tengo que procesarlos en orden, número 1, número 2, número 3, etc. Y tan pronto como se agrega un elemento a la lista, quiero procesarlo. Entonces tengo que tener algo para verificar esa lista.BlockingCollection o Queue <T> para trabajos?
¿Cuál es la mejor manera de lograr esto?
Sé que blockingcollection hace algo similar, que espera que se agregue un elemento antes de procesarlo.
Puedo usar un solo hilo con la cola y solo mientras (verdadero) y tomar elementos si hay alguno?
¿Qué opinas?
Sí exactamente! Solo estoy pidiendo esto para confirmar mi pensamiento y si alguien tiene una mejor idea :) – syncis
@Jonathan Beerhalter: O, en lugar de llamar a 'Take', podría hacer que su hilo de fondo haga un' foreach' en ['GetConsumingEnumerable'' (http://msdn.microsoft.com/en-us/library/dd287186.aspx), que producirá los elementos tal como se encuentran en 'BlockingCollection'. –
casperOne
@syncis: 'GetConsumingEnumerable' se bloqueará hasta que se agregue un elemento al' BlockingCollection 'al igual que' Take'; la cosa es, ¿qué más está haciendo tu hilo de fondo aparte de procesar estos elementos? Si está tratando de guardar hilos; no, básicamente estás volviendo a escribir el grupo de subprocesos y esa no es una buena idea en general. Tenga en cuenta que pueden aparecer más elementos para 'Tomar' o entregados a través de 'GetConsumingEnumerable' mientras procesa sus artículos uno por uno (o puede enviarlos para procesarlos en otros hilos, según sus necesidades). –
casperOne