0

我是并行编程的新手。我在下面编写了基本代码,但它并不总是像我一样运行。

Console.WriteLine ("Start");

Task task = Task.Factory.StartNew(() => {

  for (int i = 0; i < 5; i++)
{
    Console.WriteLine (i);
}

});

Console.WriteLine ("End");

我通常无法在 10 次试验中得到循环 8-9 的结果。有时它会打印循环结果,有时不会。但我它总是打印Startand End。后面发生了什么?为什么有时我无法得到循环的结果?

提前致谢,

4

3 回答 3

3

您的程序在并行循环有机会打印任何输出之前终止。

Console.WriteLine ("Start");
Task task = Task.Factory.StartNew(() => {
for (int i = 0; i < 5; i++)
{
    Console.WriteLine (i);
}
});

Console.ReadLine();
Console.WriteLine("End");

通过等待输入暂停,您将看到循环正确运行。

于 2012-07-16T13:14:02.093 回答
1

在末尾添加一个 readline。您将看到以下内容:

Start
End
0
1
2
3
4

Console.WriteLine("Start");

Task task = Task.Factory.StartNew(() =>
{

    for (int i = 0; i < 5; i++)
    {
        Console.WriteLine(i);
    }

});

Console.WriteLine("End");
Console.ReadLine();
于 2012-07-16T13:16:45.280 回答
1

你必须告诉你的主线程等到你的任务结束。

在大多数情况下,您的“结束”是在任务线程执行之前打印的。用于TaskContinuationOptions告诉父线程等待其任务线程完成。

Console.WriteLine ("Start");
Task task = Task.Factory.StartNew(() => {
for (int i = 0; i < 5; i++)
{
    Console.WriteLine (i);
}
});
task.ContinueWith(ant =>
{
    Console.WriteLine("End");
}, TaskContinuationOptions.NotOnFaulted| TaskContinuationOptions.AttachedToParent);
task.Wait();
于 2012-07-16T13:16:56.410 回答