У меня есть функция, которая заполняет поле со списком в моем приложении winform. Операция занимает несколько секунд, поэтому я хотел бы сделать ее асинхронной.Сделать Entity Framework Linq query async
Вот функция:
public static List<string> GetAllPostCodeRegions(string country)
{
using (var db = new PlaceDBContext())
{
var regions = db.PostCodes.Where(pc => pc.Country == country).OrderBy(pc => pc.Region).Select(pc => pc.Region).Distinct().ToList();
return regions;
}
}
Я попытался просто добавить в асинхронном ключевых слов, как показано ниже:
public async static Task<List<string>> GetAllPostCodeRegions(string country)
{
using (var db = new PlaceDBContext())
{
var regions = db.PostCodes.Where(pc => pc.Country == country).OrderBy(pc => pc.Region).Select(pc => pc.Region).Distinct().ToList();
return regions;
}
}
Но это ничего не ждет, и пользовательский интерфейс по-прежнему блокирует, когда я звоню:
var regions = await DataFunctions.GetAllPostCodeRegions("UK");
Как сделать эту операцию асинхронной и остановить блокировку пользовательского интерфейса?
Вы должны вызвать ToListAsync() вместо ToList() и добавить AWAIT перед этим утверждением. Для этого требуется Entity Framework 6 или выше. –
Спасибо. Мне также нужно было добавить 'using System.Data.Entity', поскольку использование ctrl + period не подсказывало это по какой-либо причине. – Guerrilla