3
respostas

Task async/await

Percebi que quando eu deletava o banco para ele ser recriado do 0 pela aplicação quando o código vai para o método SaveProdutos usando o Task que irá deixar o método asincrono ele estava perdendo o contexto dentro do foreach, ele criava a referencia de 2 a 3 produtos voltava para o for e quando voltava para o dbSet por algum motivo que ainda não sei ele recriava o contexto indo novamente na DataService, porem dps não voltava para o for e ia tentar renderizar a view e de fato funcionava porem o carrossel ficava sem Livros pq ele não efetuou o SaveChanges do SaveProdutos que dps ele faz o getProdutos para renderizar porem o banco está vazio, mudando o método SaveProdutos para void e tirando os async/await deu certo. A duvida é porque deu pau no asincrono?

        public void SaveProdutos(List<Livro> livros)
        {
            foreach (var livro in livros)
            {
                if (dbSet.Where(p => p.Codigo == livro.Codigo).Any())
                {
                     dbSet.Add(new Produto(livro.Codigo, livro.Nome, livro.Preco));
                }
            }

             contexto.SaveChanges();
        }
    }
3 respostas

Olá David!

Tem como você postar como estava o método assíncrono?

No aguardo!

Assim: encima mandei o if sem a negação mas no programa está com o ! tbm. quando está async, ele entra no for constrói um livro mas quando volta para o for no dbSet ele perde o contexto e vai para as classes que atribui o dbSet mas quando é atribuído novamente o contexto no dbSet ele não volta para o for e vai para Startup.

public async Task SaveProdutos(List<Livro> livros)
        {
            foreach (var livro in livros)
            {
                if (! await dbSet.Where(p => p.Codigo == livro.Codigo).AnyAsync())
                {
                   await   dbSet.AddAsync(new Produto(livro.Codigo, livro.Nome, livro.Preco));
                }
            }

             await  contexto.SaveChangesAsync();
        }

David, tem como compartilhar seu projeto para podermos dar uma olhada nele?

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software