async y await en C#

Muhammad Maisam Abbas 16 febrero 2024
async y await en C#

Este tutorial discutirá la programación asincrónica en C#.

Programación asincrónica en C#

Si algún proceso está bloqueado en una aplicación síncrona, toda la aplicación se bloquea y deja de responder hasta que se completa ese proceso en particular. Podemos usar programación asincrónica en este escenario. Con la programación asincrónica, nuestra aplicación puede seguir trabajando en segundo plano en algunas tareas independientes hasta que se ejecute este proceso en particular. En la programación asincrónica, toda nuestra aplicación no depende simplemente de un solo proceso que requiere mucho tiempo. La programación asíncrona se utiliza con tareas vinculadas a E/S o vinculadas a CPU. El uso principal de la programación asincrónica es crear una interfaz de usuario receptiva que no se atasque mientras espera que un proceso vinculado a E/S o vinculado a la CPU complete su ejecución. Las palabras clave await y async se utilizan para la programación asincrónica en C#. La palabra clave espera devuelve el control a la función de llamada. La palabra clave await es la palabra clave principal que habilita la programación asincrónica en C#. La palabra clave async habilita la palabra clave await. Una función que utiliza la palabra clave await debe tener la palabra clave async y devolver un objeto Task en C#. La palabra clave await no se puede utilizar sin la palabra clave async en C#. El siguiente ejemplo de código demuestra la programación síncrona en C#.

using System;
using System.Threading.Tasks;

namespace async_and_await {
  class Program {
    public static void process1() {
      for (int i = 0; i < 5; i++) {
        Console.WriteLine("Process 1");
        Task.Delay(100).Wait();
      }
    }
    public static void process2() {
      for (int i = 0; i < 5; i++) {
        Console.WriteLine("Process 2");
        Task.Delay(100).Wait();
      }
    }
    static void Main(string[] args) {
      process1();
      process2();
    }
  }
}

Producción :

Process 1
Process 1
Process 1
Process 1
Process 1
Process 2
Process 2
Process 2
Process 2
Process 2

En el código anterior, las funciones process1() y process2() son procesos independientes pero la función process2() tiene que esperar a que se complete la función process1(). Este sencillo código de programación síncrona se puede convertir en programación asíncrona con las palabras clave async y await en C#.

using System;
using System.Threading.Tasks;

namespace async_and_await {
  class Program {
    public static async Task process1() {
      await Task.Run(() => {
        for (int i = 0; i < 5; i++) {
          Console.WriteLine("Process 1");
          Task.Delay(100).Wait();
        }
      });
    }
    public static void process2() {
      for (int i = 0; i < 5; i++) {
        Console.WriteLine("Process 2");
        Task.Delay(100).Wait();
      }
    }
    static void Main(string[] args) {
      process1();
      process2();
    }
  }
}

Producción :

Process 2
Process 1
Process 1
Process 2
Process 2
Process 1
Process 1
Process 2
Process 2
Process 1

En el código anterior, usamos las palabras clave async y await para convertir el ejemplo anterior en programación asincrónica. La salida muestra claramente que la función process2() no espera para completar la función process1(). En la definición de la función process1(), usamos la palabra clave async para sugerir que se trata de una función de ejecución asincrónica. La palabra clave await en la función process1() devuelve el control a la función principal, que luego llama a la función process2(). El control sigue cambiando entre las funciones process1() y process2() hasta que se completa la función process1().

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn