当我创建任务时:
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
答案 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);