2017-07-27 169 views
0

我:的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方法结束到调用方法?

回答

3

变化

async void getData() 

async Task getData() 

你应该使用async void唯一的地方是事件处理程序就像在一个WPF应用程序按钮的点击。不使用它的原因是因为你需要返回可以等待的东西,并返回void实际上否定了这一点。

此外,没有必要创建一个新的任务。你可以改写这个如下:

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

可能要解释什么'异步void'在这里做 – BradleyDotNET

+0

仍然无法正常工作,因为他做了'新的任务(的getData)'他需要调用' .Unwrap()。Wait()'或使用Task.Run –

+2

只是不使用async void。 nuff说。除非事件.. – Botonomous