首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >任务通常不会运行

任务通常不会运行
EN

Stack Overflow用户
提问于 2012-07-16 21:10:26
回答 3查看 159关注 0票数 0

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

代码语言:javascript
复制
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。后面发生了什么?为什么有时我得不到循环的结果?

提前谢谢你,

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-16 21:14:02

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

代码语言:javascript
复制
Console.WriteLine ("Start");
Task task = Task.Factory.StartNew(() => {
for (int i = 0; i < 5; i++)
{
    Console.WriteLine (i);
}
});

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

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

票数 3
EN

Stack Overflow用户

发布于 2012-07-16 21:16:45

在结尾处添加readline。您将看到以下内容:

代码语言:javascript
复制
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();
票数 1
EN

Stack Overflow用户

发布于 2012-07-16 21:16:56

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

在大多数情况下,您的"End“都是在任务线程执行之前打印的。使用TaskContinuationOptions通知父线程等待其任务线程完成。

代码语言:javascript
复制
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();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11505048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档