等待似乎没有等待

时间:2017-07-27 17:39:15

标签: c# .net async-await

我有:

async void getData()
{
    Console.WriteLine("Start");
    HttpClient api = new HttpClient();
    await api.PostAsync("http://....",  someContent).ContinueWith(
         ....
    );
    Console.WriteLine("End");
}

void main()
{
    Task task = new Task(getData);
    task.Start();
    task.Wait();
    Console.WriteLine("Returned");
}

我一直得到以下输出:

Start
Returned
End

在控制返回到调用方法后,如何执行getData方法的结束?

1 个答案:

答案 0 :(得分:3)

更改

async void getData()

async Task getData()

您应该使用async void的唯一地方是事件处理程序,例如WPF应用程序中的按钮单击。不使用它的原因是因为你需要返回一些可以等待的东西并且返回void有效地否定了它。

此外,无需创建新任务。您可以按如下方式重写:

void main()
{
    Task task = getData();
    task.Wait();
    Console.WriteLine("Returned");
}