Diferencia entre revisiones de «Programación en Vala/Funcionalidades avanzadas del lenguaje»

Contenido eliminado Contenido añadido
Sigmar (discusión | contribs.)
Sigmar (discusión | contribs.)
Línea 560:
=== Sintaxis y ejemplos ===
 
Un método asíncrono se define mediante el modificador '''async'''. Se puede llamar a un método asíncrono con la sintaxis '''nombre_metodo.begin()''' desde un método síncrono. Desde un método asíncrono se pueden llamar a otros métodos asíncronos utilizando la palabra reservada '''yield'''. Esto hará que el método llamador se suspenda hasta que otro método devuelva el valor de retorno (y finalice por tanto su ejecución). Todo esto se realiza implícitamente mediante llamadas con '''AsyncResult'''. Todo lo relacionado con los método asíncronos en Vala depende de la biblioteca GIO, por lo que se debe compilar los programas con la opción '''--pkg gio-2.0'''. A continuación se muestra un ejemplo de este tipo de métodos:
 
<source lang=csharp>
// Ejemplo con métodos asíncronos
 
async void list_dir() {
var dir = File.new_for_path (Environment.get_home_dir()); // Se obtiene un objeto fichero del directorio HOME
try {
var e = yield dir.enumerate_children_async(FILE_ATTRIBUTE_STANDARD_NAME,
0, Priority.DEFAULT, null); // Se obtienen los ficheros/directorios que contiene el directorio HOME
while (true) {
var files = yield e.next_files_async(10, Priority.DEFAULT, null); // Se van obteniendo hasta que devuelve null y no hay más
if (files == null) {
break;
}
foreach (var info in files) {
print("%s\n", info.get_name()); // Se muestran todos los ficheros obtenidos
}
}
} catch (Error err) {
warning("Error: %s\n", err.message);
}
}
 
void main() {
list_dir.begin();
new MainLoop().run();
}
</source>
 
=== Métodos asíncronos personalizados ===