Domanda

Così ho il seguente codice

 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);

Tuttavia doeasn't uscita nulla. Ma se io commento Thread.Sleep, funziona come previsto. Giocando con diversi valori di sonno mi fa più o meno i risultati a seconda del valore.

Perché succede così?

È stato utile?

Soluzione

Ho il sospetto che il vostro programma sta uscendo prima che l'attività ha la possibilità di eseguire.

Attività eseguiti su pool di thread discussioni per impostazione predefinita, che sono thread in background. Ciò significa che il programma non aspettare che siano loro a finire prima di uscire.

Prova ad aggiungere questo sul tuo thread principale:

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

Altri suggerimenti

Stai aspettando il compito di finire da nessuna parte, o se il vostro programma di uscire prima che il compito è fatto?

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

Ho appena eseguito il codice e emette:

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

Ecco il codice della console basata sul codice dell'app Ho eseguito:

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();
    }
  }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top