这是我的实际代码:为什么不等待?
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(...)'。但要小心,异步/等待还有更多 - 真正阅读更多内容。 –