Casi toda la documentación que he visto sobre el uso de C. 4.0 Task.Factory.StartNew indica que para esperar a que se complete la tarea, necesita esperar. Pero mi prueba inicial muestra que no es necesario. ¿Alguien más puede darme una confirmación sobre esto? Tengo curiosidad de por qué tantas referencias en línea e impresas dicen que debes llamar a Wait.¿Es necesario esperar() después de usar Task.Factory.StartNew()?
Aquí hay una aplicación de consola simple que muestra que no necesito la instrucción Wait, así que la comenté. Ya sea que comente o no el tsk.Wait(), el resultado es el mismo.
Resultados previstos en todos los casos es el siguiente:
Main thread starting. After running MyTask. The result is True After running SumIt. The result is 1 Main thread ending.
El código:
class Program
{
// A trivial method that returns a result and takes no arguments.
static bool MyTask()
{
Thread.Sleep(2000);
return true;
}
// This method returns the summation of a positive integer
// which is passed to it.
static int SumIt(object v)
{
int x = (int)v;
int sum = 0;
for (; x > 0; x--)
sum += x;
return sum;
}
static void Main(string[] args)
{
Console.WriteLine("Main thread starting.");
// Construct the first task.
Task<bool> tsk = Task<bool>.Factory.StartNew(() => MyTask());
// I found this Wait statement to be completely unnecessary.
//tsk.Wait();
Console.WriteLine("After running MyTask. The result is " +
tsk.Result);
// Construct the second task.
Task<int> tsk2 = Task<int>.Factory.StartNew(() => SumIt(1));
Console.WriteLine("After running SumIt. The result is " +
tsk2.Result);
tsk.Dispose();
tsk2.Dispose();
Console.WriteLine("Main thread ending.");
Console.ReadLine();
}
}
Gracias, Timwi. Tuve un pedo cerebral y no noté que estaba usando la Tarea en lugar de Tarea. ¡Ahora tiene sentido! –
@tambui: ¿qué le parece marcar esto como una respuesta? – stackoverflowuser
@stackoverflowuser: Lo siento, no sabía cómo hacerlo. Hecho ahora. –