【发布时间】:2017-07-28 14:31:40
【问题描述】:
这是我的实际代码:
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方法的结尾返回给调用者? -
看来您真的应该阅读/通过正确介绍 async/await 来工作(例如 this one)。简而言之:
getData已经返回一个任务,通过将其包装在另一个任务中,您必须等待内部任务。或者直接在button1_Click中写await getData(...)。但要注意,async/await 还有很多内容 - 真的要阅读更多内容。
标签: c# .net async-await task