C# 主线程在任务线程完成之前终止

C# 主线程在任务线程完成之前终止,c#,console,taskfactory,C#,Console,Taskfactory,嗨,我需要你们的帮助 我在main方法中声明了新任务,如下所示: static void Main(string[] args) { Task firstTask = Task.Factory.StartNew(()getPackage(packageId)); Task secondTask=firstTask.ContinueWith((_=>UpdatePackage(myPackage))); } 我的问题是,主

嗨,我需要你们的帮助

我在main方法中声明了新任务,如下所示:

   static void Main(string[] args)
   {    
       Task firstTask = Task.Factory.StartNew(()getPackage(packageId));
       Task secondTask=firstTask.ContinueWith((_=>UpdatePackage(myPackage)));       
   }
我的问题是,主线程在我的任务完成其操作之前终止。
在终止主线程之前,我应该如何等待任务完成其操作?

添加以下代码以使主线程阻塞,直到在命令窗口中按enter键

Console.Readline();
更新:

如果您想要一个非交互式的解决方案,那么您可以等待所有任务完成

Task.WaitAll(firstTask, secondTask);

将任务分配给一个线程,然后在主调用中调用所创建线程的.Join()函数(当然,在它启动之后)。这样,应用程序将等待任务结束后再结束


此解决方案比Console.ReadLine更复杂,但允许您在询问结束时离开,而不是在询问之前或之后

您可以使用另一种范式来处理此问题

static void Main(string[] args)
{
    MainAsync().Wait();
}
static async Task MainAsync()
{
    Task firstTask = new Task(()=>getPackage(packageId));
    firstTask.ContinueWith(()=>UpdatePackage(myPackage)));
    await firstTask.Run();
}

像这样混合异步和同步代码时要小心,但出于您的目的,这应该可以正常工作(如果这是winforms或WPF,您可能需要担心向UI线程发送消息,但这与此处无关。

谢谢mike,但它要求我每次都按enter键,我想将此控制台应用程序放入我的服务器任务计划程序,它将每1小时运行一次,除了添加console.readline()之外还有其他方法吗?如果您不需要与此控制台应用程序交互,那么为什么首先要使用任务/线程?只需同步运行您的方法,并在完成后让其退出即可。。。