2

嗨,我需要你的帮助,伙计们,

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

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

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

4

3 回答 3

4

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

Console.Readline();

更新:

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

Task.WaitAll(firstTask, secondTask);
于 2015-07-23T00:27:17.187 回答
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 线程发送消息,但这与此处无关。

于 2015-07-23T00:39:43.273 回答
1

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

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

于 2015-07-23T00:35:27.923 回答