這是我的實際代碼:爲什麼不等待?
async Task getData()
{
Thread.Sleep(5000);
Console.WriteLine("Step 1");
using (HttpClient api = new HttpClient())
await api.GetAsync("http://google.com/").ContinueWith(
(getTask) =>
Console.WriteLine(getTask.Result.StatusCode);
);
Console.WriteLine("Step 2");
}
private void button1_Click(object sender, EventArgs e)
{
Task<Task> task = new Task<Task>(getData);
task.Start();
task.Wait();
Console.WriteLine("Step 3");
}
我得到以下輸出:
Step 1
Step 3
OK
Step 2
爲什麼Step 3
不來Step 2
後?
如何讓它按順序工作,即只返回到getData
的調用者,直到getData
中的所有內容完成爲止?
嘗試'task.Result.Wait()',但你的例子似乎有點過於複雜。 –
謝謝!有用。可以解釋爲什麼?如何控制流程繞過getData方法的結尾返回給調用者? –
看起來你應該真正閱讀/通過正確的介紹異步/等待(例如[這個](https://blog.stephencleary.com/2012/02/async-and-await.html)例如) 。簡而言之:'getData'已經返回一個任務,通過將它包裝在另一個任務中,你必須等待內部任務。或者直接在'button1_Click'中寫'await getData(...)'。但要小心,異步/等待還有更多 - 真正閱讀更多內容。 –