0
respostas

Quantidade de itens processados.

O ParallelLoopResult.LowestBreakIterantion apresenta o valor do primeiro índice que chamou o método Break(). Criei uma variável statica para fazer a contagem e não tem nada haver o índice do LowestBreakIteration com a quantidade de items processados.

    class Program
    {
        static int qtd = 0;
        static object obj = new object();

        static void Main(string[] args)
        {
            //Tarefa 1: Processar uma faixa de 100 itens em paralelo
            //Tarefa 2: Completou sem interrupção?
            //Tarefa 3: Interromper quando começar a processar o valor 75
            //Tarefa 4: Quantos itens foram processados (parcialmente)?

            var paralleLoopResult = Parallel.For(0, 100, (i, state) =>
            {
                if (i == 2)
                    state.Break();

                Processar(i);
            });
            Console.WriteLine($"Completou sem interrupção? {paralleLoopResult.IsCompleted}");
            Console.WriteLine($"Quantos itens foram processados (parcialmente): {paralleLoopResult.LowestBreakIteration}....{qtd}");

            Console.WriteLine("Término do processamento. Tecle [ENTER] para terminar.");
            Console.ReadLine();
        }

        static void Processar(object item)
        {
            Console.WriteLine("Começando a trabalhar com: " + item);
            Thread.Sleep(100);
            lock (obj)
            {
                qtd = qtd + 1;
            }
            Console.WriteLine("Terminando a trabalhar com: " + item);
        }
    }