并行任务执行打印顺序

时间:2017-03-04 13:21:35

标签: c# multithreading

这是从MSDN获取的有关任务的示例:

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

class CustomData
{
   public long CreationTime;
   public int Name; 
   public int ThreadNum;
}

public class Example
{
   public static void Main()
   {
      Task[] taskArray = new Task[10];
      for (int i = 0; i < taskArray.Length; i++) {
         taskArray[i] = Task.Factory.StartNew( (Object obj ) => 
                        {
                            CustomData data = obj as CustomData;
                            if (data == null) 
                                return;

                            data.ThreadNum = Thread.CurrentThread.ManagedThreadId;
                         },
                         new CustomData() {Name = i, CreationTime = DateTime.Now.Ticks});
      }
      Task.WaitAll(taskArray);     
      foreach (var task in taskArray) {
         var data = task.AsyncState as CustomData;
         if (data != null)
            Console.WriteLine("Task #{0} created at {1}, ran on thread #{2}.",
                              data.Name, data.CreationTime, data.ThreadNum);
      }                     
   }
}

该示例显示如下输出:

//       Task #0 created at 635116412924597583 on thread #3.
//       Task #1 created at 635116412924607584 on thread #4.
//       Task #3 created at 635116412924607584 on thread #4.
//       Task #4 created at 635116412924607584 on thread #4.
//       Task #2 created at 635116412924607584 on thread #3.
//       Task #6 created at 635116412924607584 on thread #3.
//       Task #5 created at 635116412924607584 on thread #4.
//       Task #8 created at 635116412924607584 on thread #4.
//       Task #7 created at 635116412924607584 on thread #3.
//       Task #9 created at 635116412924607584 on thread #4.

我不明白为什么在这个例子中,任务可能会以0 1 2 3的自然顺序打印出来。如果数组中的每个单元都得到一个对象迭代器值那么即使每个任务在不同的时间运行,它为什么重要呢?它们仍然各自得到一个循环迭代器值的状态..

链接到示例:https://msdn.microsoft.com/en-us/library/dd537609(v=vs.110).aspx

0 个答案:

没有答案