C# 并行任务执行打印顺序
这是一个取自MSDN的关于任务的示例: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
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.