Usar o SQLite de forma assíncrona
Se você executar consultas em um banco de dados de forma síncrona, isso pode levar a problemas de desempenho e aplicativos que não respondem. SQLite-net tem uma API assíncrona que você pode usar para manter seu aplicativo responsivo.
Nesta unidade, você aprenderá a usar a API assíncrona SQLite-net para garantir que seu aplicativo permaneça altamente responsivo.
Compreender consultas assíncronas
Até este ponto, você executava todas as operações do banco de dados no thread da interface do usuário. No entanto, para criar um aplicativo móvel altamente responsivo, você quer fazer as coisas um pouco diferente. Se você executar operações de banco de dados no thread da interface do usuário, isso poderá fazer com que a interface do usuário congele se a operação demorar muito tempo para ser concluída.
Para resolver esse problema, SQLite-net inclui uma API assíncrona através da SQLiteAsyncConnection
classe. Por exemplo, para criar uma tabela de forma assíncrona, você pode usar o CreateTableAsync
método:
var conn = new SQLiteAsyncConnection(dbPath);
await conn.CreateTableAsync<User>();
Execute operações assíncronas com SQLite-net
A SQLiteAsyncConnection
classe expõe operações semelhantes como sua contraparte síncrona. No entanto, as operações são todas baseadas em tarefas para uso em segundo plano.
As operações assíncronas comuns disponíveis incluem:
CreateTableAsync
: Cria uma tabela com base na classe indicadaDropTableAsync
: Descarta a tabela que se correlaciona com a classe indicadaGetAsync
: Obtém o registro na tabela que se correlaciona com a classe indicada e corresponde à chave primária passada para o construtorInsertAsync
: Insere um novo registro usando o item passado para o construtorUpdateAsync
: Atualiza um registro existente usando o item passado para o construtorDeleteAsync
: Exclui o registro na tabela que mapeia para a classe indicada e corresponde à chave primária passada para o construtorQueryAsync
: Executa uma consulta SQL direta e retorna um objetoExecuteAsync
: Executa uma consulta SQL direta e retorna o número de linhas afetadasExecuteScalarAsync
: Executa uma consulta SQL direta e retorna o resultado únicoToListAsync
: Executa o método Table de forma assíncrona
O código a seguir mostra um exemplo de como usar o ToListAsync
método para recuperar registros de forma assíncrona:
SQLiteAsyncConnection conn;
ObservableCollection<User> userList; // Bound to UI
...
public async Task AddAllUsersAsync()
{
List<User> users = await conn.Table<User>().ToListAsync();
// Must be on UI thread here!
foreach (var u in users)
userList.Add(u);
}
Neste exemplo, o ToListAsync
método busca todos os usuários do banco de dados de forma assíncrona. Se você usar esse método, sua interface do usuário permanecerá responsiva mesmo se houver um grande conjunto de usuários no banco de dados.