为什么没有等待就没有启动任务

时间:2013-11-19 18:19:32

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

当我创建任务时:

for (int i = 0; i < 5; i++)
{
   // var testClient =
        Task.Factory.StartNew(
        () =>
        {
            TaskClient();
        }); 
}  

public static void TaskClient()
{
    System.Console.WriteLine("--------------------");
}

但这不会启动控制台写入直到我等待任务!!!

Task.Factory.StartNew(
            () =>
            {
                TaskClient();
            }).Wait();

为什么我需要调用Wait,当我使用StartNew

启动线程时

1 个答案:

答案 0 :(得分:1)

@vcsjones必须是对的。您没有看到结果,因为程序已结束且窗口已关闭。

我已经尝试了你的代码,如果我从cmd运行程序,没有调试器,我可以看到正确的输出。为了使它更有意义,我在Console.WriteLine方法的末尾添加了另一个Main

for (int i = 0; i < 5; i++)
{
    // var testClient =
    Task.Factory.StartNew(
    () =>
    {
        TaskClient();
    });
}

Console.WriteLine("End of program execution.");

返回:

End of program execution.
--------------------
--------------------
--------------------
--------------------
--------------------

正如你所看到的,它运作得很好。

如果您想等待进一步执行直到完成所有任务,您可以使用Task.WaitAll静态方法:

var tasks = new Task[5];

for (int i = 0; i < 5; i++)
{
    // var testClient =
    tasks[i] = Task.Factory.StartNew(
                () =>
                {
                    TaskClient();
                });
}

Task.WaitAll(tasks);