主线程在任务线程完成之前终止
本文关键字:线程 终止 任务 | 更新日期: 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允许你在任务结束时离开,而不是在任务结束之前或之后。