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.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, se esperaría que el código se bloqueara durante casi 5 segundos, ya que está esperando a que la tarea se complete antes de asignar el resultado a i e imprimirlo. Sin embargo, parece que la operación Task.Delay no está bloqueando realmente la tarea StartNew, lo que significa que el programa no esperará a que termine el retraso antes de asignar el resultado e imprimirlo.

    Una razón de este comportamiento podría ser que la operación Task.Delay en realidad no está bloqueando, sino que devuelve una tarea que espera la cantidad de tiempo especificada antes de completarse. Por lo tanto, la tarea StartNew puede seguir ejecutándose mientras la tarea de retraso aún está esperando, lo que resulta en un comportamiento aparentemente no bloqueante.

    Para confirmar esto, puedes modificar el código para esperar la tarea de retraso en lugar de usar la propiedad Id, de la siguiente manera:

    Task<int> task1 = Task<int>.Factory.StartNew(async () =>
    {
        await Task.Delay(5000);
        return 100;
    });
    int i = await task1;
    Console.WriteLine(i);
    

    Esto debería hacer que el código se bloquee durante aproximadamente 5 segundos antes de imprimir el resultado.

Comments are closed.