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

本文关键字:线程 终止 任务 | 更新日期: 2023-09-27 18:04:03

大家好,我需要你们的帮助,

我在main方法中声明了new Task,像这样:

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

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

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

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

Console.Readline();

更新:

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

Task.WaitAll(firstTask, secondTask);

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

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线程传递消息,但这与这里无关。

将任务分配给线程,然后在main中调用创建的线程的. join()函数(当然是在它已经启动之后)。这样,应用程序将等待任务结束后才结束。

这个解决方案比控制台更复杂。ReadLine允许你在任务结束时离开,而不是在任务结束之前或之后。