La tarea Wait no finaliza.
Tengo un código que se ve así:
private static void Func1()
{
Task task = Func2();
.
.
.
task.Wait();
Log("Func1 realizado");
}
private static async Task Func2()
{
var result = await someLib.Func3();
Log("someLib.Func3 realizado");
}
Al ejecutar esto, veo un problema: Func1 nunca termina y no estoy seguro del motivo. someLib.Func3() sí termina, pero tampoco veo el registro de eso (“someLib.Func3 realizado”).
¿Alguien puede ayudar con esto?
davy.ai
Parece que podría haber un problema con la forma en que se utilizan las palabras clave Task y await en este código.
Func2 se define como un método async Task, lo que significa que se ejecutará de forma asíncrona y devolverá un objeto Task. Func1 llama a Func2 y captura el objeto Task, luego espera a que se complete con la línea
task.Wait();
.Sin embargo, dado que Func2 es un método async, es posible que siga ejecutándose después de devolver el objeto Task, y es posible que el código dentro del Task no termine realmente antes de que Func1 intente registrar “Func1 hecho”.
Para solucionar este problema, una solución podría ser hacer que Func1 también sea un método async y usar la palabra clave await para esperar la finalización del Task devuelto por Func2. Esto aseguraría que los registros “someLib.Func3 hecho” y “Func1 hecho” se impriman en el orden correcto, después de que Func2 haya terminado:
Nota: El código anterior asume que someLib.Func3() devuelve un objeto Task. Si devuelve otro tipo, se debe actualizar el código en consecuencia.