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

时间:2015-07-23 00:23:55

标签: c# console taskfactory

嗨,我需要你的帮助,

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

   static void Main(string[] args)
   {    
       Task firstTask = Task.Factory.StartNew(()getPackage(packageId));
       Task secondTask=firstTask.ContinueWith((_=>UpdatePackage(myPackage)));       
   }

我的问题是,主线程在我的任务完成其操作之前终止。  在终止主线程之前,我应该如何等待Task完成其操作?

3 个答案:

答案 0 :(得分:4)

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

Console.Readline();

<强>更新

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

Task.WaitAll(firstTask, secondTask);

答案 1 :(得分:3)

您可以使用备用范例来解决此问题。

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线程发送消息,但这在这里不相关。

答案 2 :(得分:1)

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

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