嗨,我需要你的帮助,
我在我的主要方法中声明了新的任务,如下所示:
static void Main(string[] args)
{
Task firstTask = Task.Factory.StartNew(()getPackage(packageId));
Task secondTask=firstTask.ContinueWith((_=>UpdatePackage(myPackage)));
}
我的问题是,主线程在我的任务完成其操作之前终止。 在终止主线程之前,我应该如何等待Task完成其操作?
答案 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更复杂,但允许您在请求结束之前而不是之前而不是之后离开。