Uso de SQLite de forma asincrónica
Si ejecuta consultas en una base de datos de forma síncrona, puede provocar problemas de rendimiento y aplicaciones que no responden. SQLite-net tiene una API asincrónica que puede usar para mantener la respuesta de la aplicación.
En esta unidad aprenderá a usar la API asincrónica de SQLite-net para garantizar que la aplicación siga teniendo una gran capacidad de respuesta.
Descripción de las consultas asincrónicas
Hasta este punto, ejecutó todas las operaciones de base de datos en el subproceso de la interfaz de usuario. Aun así, para compilar una aplicación móvil con una alta capacidad de respuesta, le interesa hacer las cosas de manera diferente. Si ejecuta operaciones de base de datos en el subproceso de la interfaz de usuario, esta podría bloquearse en caso de que la operación tarde mucho en completarse.
Para solucionar este problema, SQLite-net incluye una API asincrónica a través de la clase SQLiteAsyncConnection
. Por ejemplo, para crear una tabla de forma asincrónica, puede usar el método CreateTableAsync
:
var conn = new SQLiteAsyncConnection(dbPath);
await conn.CreateTableAsync<User>();
Realizar operaciones asincrónicas con SQLite-net
La clase SQLiteAsyncConnection
expone operaciones similares como el equivalente sincrónico. pero todas las operaciones se basan en tareas para su uso en segundo plano.
Entre las operaciones asincrónicas comunes disponibles se incluyen:
CreateTableAsync
: crea una tabla basada en la clase indicada.DropTableAsync
: quita la tabla puesta en correlación con la clase indicada.GetAsync
: obtiene el registro de la tabla que está puesta en correlación con la clase indicada y coincide con la clave principal que se ha pasado al constructorInsertAsync
: inserta un nuevo registro mediante el elemento pasado al constructorUpdateAsync
: actualiza un registro existente mediante el elemento pasado al constructorDeleteAsync
: elimina el registro de la tabla que se asigna a la clase indicada y coincide con la clave principal que se ha pasado al constructorQueryAsync
: ejecuta una consulta SQL directa y devuelve un objeto.ExecuteAsync
: ejecuta una consulta SQL directa y devuelve el número de filas afectadas.ExecuteScalarAsync
: ejecuta una consulta SQL directa y devuelve un solo resultado.ToListAsync
: ejecuta el método Table de forma asincrónica.
En el código siguiente se muestra un ejemplo del uso del método ToListAsync
para recuperar registros de forma asincrónica:
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);
}
En este ejemplo, el método ToListAsync
captura todos los usuarios de la base de datos de forma asincrónica. Si usa este método, la interfaz de usuario seguirá teniendo capacidad de respuesta incluso si hay un gran conjunto de usuarios en la base de datos.