Асинхронная загрузка данных SQLite
Есть класс Repository:
public class Repository
{
private static readonly Model db = new Model();
public static async Task LoadDB() => await db.Clients.LoadAsync();
}
Код загрузки данных из БД:
private async void LoadDataGrid(object sender, EventArgs e)
{
try
{
await Repository.LoadDB();
}
catch(Exception ex)
{
ShowInfo(ex.Message);
return;
}
}
Я надеялся, что интерфейс не будет подвисать на момент загрузки БД, но он всё равно зависает.
В чем может быть проблема?
У меня .NET Core 3.1 + Microsoft.EntityFrameworkCore.Sqlite
Gif проблемы:

Ответы (1 шт):
SQLite doesn't support asynchronous I/O. Async ADO.NET methods will execute synchronously in Microsoft.Data.Sqlite. Avoid calling them.
Ограничения асинхронного режима
SQLite не поддерживает асинхронный ввод-вывод. Асинхронные методы ADO.NET будут выполняться синхронно в Microsoft.Data.Sqlite. Старайтесь не вызывать их.
В этом случае поможет запуск отдельной задачи.
В комментариях @aepot предложил следующее решение:
public static Task LoadDB() => Task.Run(async () => await db.Clients.LoadAsync());
Но так как с sqlite асинхронные методы всё равно работают синхронно, то ещё лучше избавиться от них:
public static Task LoadDB() => Task.Run(() => db.Clients.Load());