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