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()
.
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