Noticias

* Completa este formulario para conocer los temas de tu interes, te tomará unos segundos.

* Contenido actualizado diariamente!!

* Nueva categoría JavaScript!, aprender javascript está en tus manos!

* Nueva categoría VB .Net!, aprender VB .NET fácilmente con franvarvil!

* Sigue a la página para seguir creciendo!!

viernes, 1 de mayo de 2020

VB.Net: Hilos, Async y Await

No hay comentarios :
Introducción

Hoy en día, con el crecimiento en la complejidad de los sistemas y con la necesidad de realizar varias tareas a la vez, debemos implementar funciones asíncronas que nos permitirán ejecutar tareas mientras se sigue utilizando la aplicación.

Desarrollo

Visual Basic .Net nos brinda la posibilidad de crear procesos asíncronos de una forma sencilla con las etiquetas Async y Await, además de la clase Thread. Sin embargo es de gran importancia entender como funcionan estos elementos tan utilizados.

Primeramente, Async es una declaración para definir una función de tipo asíncrona, es decir, cuando se ejecute creará un subproceso y resolverá lo que esté implementado en la función, por ejemplo una función asíncrona podría ser la siguiente:

    'Se crea una función asíncrona que retorna una fecha
    Private Async Function LongMethodAsync() As Task(Of DateTime) 
        Dim res As DateTime = Await Task.Run(Function() Sleep()) 
        ' Se ejecuta la función Sleep y se espera hasta que de un resultado
        Return res
    End Function

    ' Función que espera 5 segundos y retorna la fecha actual
    Private Function Sleep() 
        Threading.Thread.Sleep(5000)
        Return DateTime.Now
    End Function

Esta función utiliza un Await, para esperar que la tarea Sleep() termine antes de hacer el retorno de la fecha. En otras palabras, con Await, detendremos el proceso de una función asíncrona hasta que tenga un resultado que necesitemos para seguir con su ejecución, en este caso el valor retornado por la función Sleep()

Para probar estas funciones podemos hacer otra función asíncrona que llame a nuestro LongMethodAsync, de la siguiente manera:

  

    Public Async Sub CallAsync() ' Se crea una función que realice los llamados

        ' Se crea una tarea asíncrona, aún no se inicia
        Dim lTask As Task(Of DateTime) = LongMethodAsync() 
        ' Se escribe en consola
        Console.WriteLine("Después del llamado: " & DateTime.Now)
        ' Se ejecuta el hilo, y se espera hasta que de un resultado
        Dim lRes As DateTime = Await lTask 
        ' Se escribe en consola
        Console.WriteLine("Resultado del llamado: " & DateTime.Now) 

    End Sub

    'Output
    ' Después del llamado: 05-01-2020 12:00:00
    ' Resultado del llamado: 05-01-2020 12:00:05

Conclusión

Las tareas asíncronas son de gran utilidad en tareas pesadas o que pueden tardar mucho, de esta forma el usuario podrá seguir utilizando nuestra aplicación aún cuando la función asíncrona no ha terminado.


No hay comentarios :

Publicar un comentario