Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Select( obj => Task.Factory.StartNew(()=> algo())); Não mapeai a lista toda

Estou passando uma lista(List) com 18763 Produtos, porém no final do processamento estou recebendo apenas 18756 em outras lista onde estou adicionando os valores

  Task IColetorFile.SetProdutosDigitacao()
        {
             return Task.Run(async ()=> {
             var processamento = ProdutosValidos.Select(pro => {
                    return Task.Factory.StartNew(() => SetProdutosDigitacao(pro),Token);
                });
                await Task.WhenAll(processamento);
            });
        }
  private void SetProdutosDigitacao(Produtos pro)
        {
            ColetorReportEventArgs args = new ColetorReportEventArgs();
            args.Produto = pro;
            args.LinhaCount = ProdutosValidos.Count;
            int qtd = pro.QTD;
            pro.QTD = 0;
            ProdutosPedido.AddListNoControl(pro, qtd);
            SetProdutosDigitacaoReportProgress.Invoke(this, args);
        }
3 respostas
solução!

Oi Fabricio, tudo bem?

Como seu código não tem nenhuma condicional, if, switch, etc, eu tentaria primeiro ver se o desvio não está ocorrendo por causa de alguma exceção:

             var processamento = ProdutosValidos.Select(pro => {
                    return Task.Factory.StartNew(() => SetProdutosDigitacao(pro),Token);
                });

    try 
    {
        await Task.WhenAll(processamento);
    }
    catch (Exception ex) 
    {
        var exceptions = processamento.Where(t => t.Exception != null)
                              .Select(t => t.Exception);
    throw new AggregateException(exceptions);
    }

Nesse código, uma exceção agregada será lançada com todas as exceções contidas nas tasks. Por favor tente rodar esse código e veja o resultado.

Deu certo! Obrigado!

Excelente, Fabricio, fico feliz por ter ajudado! E obrigado por participar do fórum!