Pregunta

Entonces tengo el siguiente código

 Action d = () =>
                {                                                             
                   for (int i = 0; i <= 10; i++)
                   {
                      Thread.Sleep(50);
                      Console.WriteLine("Task: {0} log:{1}",Thread.CurrentThread.ManagedThreadId,i);
                   }
                };
 Task.Factory.StartNew(d);

Sin embargo, no produce nada. Pero si comento Thread.sleep, funciona como se esperaba. Jugar con diferentes valores de sueño me da más o menos resultados dependiendo del valor.

¿Por qué sucede de esta manera?

¿Fue útil?

Solución

Sospecho que su programa está saliendo antes de que la tarea tenga la oportunidad de ejecutarse.

Las tareas se ejecutan en los subprocesos de grupo de hilos de forma predeterminada, que son hilos de fondo. Eso significa que su programa no espera a que terminen antes de salir.

Intente agregar esto en su hilo principal:

var task = Task.Factory.StartNew( d );
task.Wait();

Otros consejos

¿Está esperando que la tarea termine en cualquier lugar, o su programa renuncia antes de que se realice la tarea?

Task task = Task.Factory.StartNew(d);
task.Wait();

Acabo de ejecutar tu código y sale:

Task: 10 log:0
Task: 10 log:1
Task: 10 log:2
Task: 10 log:3
Task: 10 log:4
Task: 10 log:5
Task: 10 log:6
Task: 10 log:7
Task: 10 log:8
Task: 10 log:9
Task: 10 log:10

Aquí está el código de consola basado en su aplicación de código que he ejecutado:

using System.Threading;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
  class Program
  {
    static void Main(string[] args)
    {
      Action d = () =>
      {
        for (int i = 0; i <= 10; i++)
        {
          Thread.Sleep(50);
          Console.WriteLine("Task: {0} log:{1}", Thread.CurrentThread.ManagedThreadId, i);
        }
      };
      Task.Factory.StartNew(d);
      Console.ReadLine();
    }
  }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top