我是一个并行编程的新手。我写了下面的基本代码,但它并不总是像我预期的那样运行。
Console.WriteLine ("Start");
Task task = Task.Factory.StartNew(() => {
for (int i = 0; i < 5; i++)
{
Console.WriteLine (i);
}
});
Console.WriteLine ("End");我通常不能得到循环的结果,在10次试验中有8-9次。有时它打印循环结果,有时不打印。但它总是打印Start和End。后面发生了什么?为什么有时我得不到循环的结果?
提前谢谢你,
发布于 2012-07-16 21:14:02
在并行循环有机会打印任何输出之前,您的程序正在终止。
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-16 21:16:45
在结尾处添加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-16 21:16:56
你必须告诉你的主线程等待你的任务结束。
在大多数情况下,您的"End“都是在任务线程执行之前打印的。使用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();https://stackoverflow.com/questions/11505048
复制相似问题