es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Comprendiendo Async y Await en .Net

De los ejemplos a continuación, no entiendo por qué el código async y await no funcionan en el primer ejemplo pero sí funcionan en el segundo ejemplo.

1er Ejemplo:

public static async Task Main(string[] args)
{
    Stopwatch stopWatch = new Stopwatch();
    stopWatch.Start();

    Console.WriteLine("comenzó");
    var i = await GetIntAsync(10);
    var j = await GetstringAsync("abc");
    Console.WriteLine($"int {i}, string {j}");

    stopWatch.Stop();
    Console.WriteLine("Tiempo de ejecución " + stopWatch.ElapsedMilliseconds);
}

2do Ejemplo:

public static async Task Main(string[] args)
{
    Stopwatch stopWatch = new Stopwatch();
    stopWatch.Start();

    Console.WriteLine("comenzó");
    var i = GetIntAsync(10);
    var j = GetstringAsync("abc");
    await i; await j;
    Console.WriteLine($"int {i.Result}, string {j.Result}");

    stopWatch.Stop();
    Console.WriteLine("Tiempo de ejecución " + stopWatch.ElapsedMilliseconds);
}

Método GetIntAsync:

public static async Task GetIntAsync(int i)
{
    Console.WriteLine("esperando 3 segundos");
    await Task.Run(() =>
    {
        Thread.Sleep(3000);
        Console.WriteLine("espera int completa");
    });
    return i;
}

Método GetstringAsync:

public static async Task GetstringAsync(string i)
{
    Console.WriteLine("esperando 6 segundos");
    await Task.Run(() =>
    {
        Thread.Sleep(6000);
        Console.WriteLine("espera string completa");
    });
    return i;
}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    En el primer ejemplo, async y await pueden no estar funcionando porque no se usa la palabra clave await al llamar a los métodos GetintAsync y GetstringAsync. Esto significa que el programa puede no esperar a que estos métodos se ejecuten y devuelvan sus valores antes de pasar a las siguientes líneas de código.

    En el segundo ejemplo, async y await se utilizan correctamente. Los métodos GetIntAsync y GetstringAsync se llaman sin la palabra clave await, pero las llamadas a los métodos se asignan a las variables i y j. Luego, se utiliza la palabra clave await para esperar a que tanto i como j se completen antes de imprimir sus valores.

    Usar await es importante al llamar a métodos asíncronos porque permite que el programa espere a que el método se complete antes de continuar con otras líneas de código. Sin await, el programa puede pasar a la siguiente línea antes de que el método haya devuelto su valor.

Comments are closed.