Question

J'ai le code suivant

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

Cependant, il doeasn't quoi que ce soit de sortie. Mais si je commente Thread.Sleep, cela fonctionne comme prévu. Jouer avec différentes valeurs de sommeil me fait plus ou moins de résultats en fonction de la valeur.

Pourquoi se fait-il de cette façon?

Était-ce utile?

La solution

Je soupçonne que votre programme est sortie avant que la tâche ait une chance de fonctionner.

exécuter des tâches sur des fils de pool de fil par défaut, qui sont des fils de fond. Cela signifie que votre programme n'attend pas pour eux de terminer avant de quitter.

Essayez d'ajouter ceci sur votre thread principal:

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

Autres conseils

Attendez-vous la tâche de terminer partout, ou votre programme avant quitter la tâche est accomplie?

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

Je viens exécuter votre code et sorties:

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

Voici le code de la console en fonction de votre application de code que je n'ai plus:

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();
    }
  }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top