Esta es una función sincrónica:
public static List<Libro> Listar()
{
var resultado = new List<Libro>();
using(var con=new Contexto()) // garantiza que con se va a cerrar
{
resultado = con.Libros.Include(l=>l.IdCategoriaNavigation).ToList();
}
return resultado;
}
Es decir, se ejecuta así:
- Inicia la función.
- Lee la base de datos, mientras se lee la base, la ejecución va a estar detenido.
- Y se regresa el dato final.
La versión asincrónica:
public static async Task<List<Libro>> ListarAsync()
{
var resultado = new List<Libro>();
using (var con = new Contexto()) // garantiza que con se va a cerrar
{
resultado = await con.Libros.Include(l => l.IdCategoriaNavigation).ToListAsync();
}
return resultado;
}
Y se ejecuta de la siguiente manera:
- Inicia la función generando un hilo de proceso nuevo.
- Se lee la base de datos, y se detiene el hijo de ejecución
- Y regresa el dato final