Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 并行任务执行打印顺序_C#_Multithreading - Fatal编程技术网

C# 并行任务执行打印顺序

C# 并行任务执行打印顺序,c#,multithreading,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() { T

这是一个取自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);
      }                     
   }
}
我不明白为什么在本例中,任务可能不会以0 1 2 3的自然顺序打印。。如果数组中的每个单元格都获得一个具有迭代器值的对象,那么即使每个任务在不同的时间运行,这又有什么关系呢?它们仍然各自获得一个带有循环迭代器值的状态


链接到示例:

请尝试设置问题的格式。按照目前的计划,这几乎是不可能的。你自己运行了这段代码并复制了订单吗?因为在MSDN示例中,任何内容都可以编写,而不必与现实相关。@pinkfloydx33您是对的。。完成。@Evk我还是不能自己运行它。。我认为你错了,因为如果只有一种输出的可能性,他们不会写“像下面这样的输出”是的,我很确定它是有序的。如果你不确定,你可以自己跑。由于它们复制了上一个示例中粘贴的输出(因为时间戳相同),因此它们的输出无论如何都不可信,可以忽略。
//       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.