martes, 15 de diciembre de 2015

C# BlockingCollection CompleteAdding

En el uso de BlockingCollection es posible utilizar el método CompleteAdding para señalarle que no hay más elementos que agregar. Si otros hilos esta esperando por nuevos elementos, estos no bloquearan a ninguno.

En el siguiente ejemplo se ha removido el siclo While. Usando GetCosumingEnumerable, usted obtiene un IEnumerable que bloquea hasta encontrar un nuevo elemento. De esta forma, usted puede usar foreach con su  BlockingCollection  para enumerar este.

using System;
using System.Collections.Concurrent;
using System.Threading.Tasks;

namespace UsandoGetConsumingEnumerable
{
    class Program
    {
        static void Main(string[] args)
        {
            BlockingCollection<string> col = new BlockingCollection<string>();
                       
            Task read = Task.Run(() =>
            {
                foreach (string v in col.GetConsumingEnumerable())
                    Console.WriteLine(v);
            });

            Task write = Task.Run(() =>
            {
                while (true)
                {
                    string s = Console.ReadLine();
                    if (string.IsNullOrWhiteSpace(s)) break;
                    col.Add(s);
                }
            });

            write.Wait();
        }
    }
}

Referencia:
Exam Ref 70-483 Programming in C#

No hay comentarios.:

Publicar un comentario