任务通常不会运行

时间:2012-07-16 13:10:26

标签: c# .net task-parallel-library

我是并行编程的新手。我写下面的基本代码,但它总是在我除外的情况下运行。

Console.WriteLine ("Start");

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

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

});

Console.WriteLine ("End");

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

提前致谢,

3 个答案:

答案 0 :(得分:3)

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

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

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

等待输入暂停,你会看到循环正确运行。

答案 1 :(得分: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();

答案 2 :(得分: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();