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);
}
}