【问题标题】:Why Task does not start without Wait为什么任务没有等待就无法启动
【发布时间】:2013-11-20 02:27:46
【问题描述】:

当我创建一个任务时:

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启动线程时

【问题讨论】:

  • 循环之后会发生什么?节目结束了吗?
  • 程序可能要结束了。 “等待”允许任务在程序退出之前完成(写入控制台)。任务正在开始,你只是没有等待它做任何事情。

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


【解决方案1】:

@vcsjones 必须是正确的。您看不到结果,因为程序结束并且窗口已关闭。

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

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);

【讨论】:

    猜你喜欢
    • 2015-06-27
    • 2021-09-27
    • 1970-01-01
    • 2017-11-04
    • 2017-11-11
    • 2020-01-02
    • 1970-01-01
    • 1970-01-01
    • 2014-08-05
    相关资源
    最近更新 更多