2017-07-27 91 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

相關問題