这是我的实际代码:
我得到了以下输出:
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
为什么第三步
不在第二步
之后?
如何使它按顺序工作,即在getData
中的所有操作完成后才返回给调用者?
task.Result.Wait()
,但您的示例似乎有点过于复杂。 - Christian.KgetData
方法的结尾并返回给调用者的? - Old GeezergetData
已经返回一个任务,通过将其包装在另一个任务中,你必须等待内部任务。或者,在button1_Click
中直接编写await getData(...)
。但要注意,异步/等待还有更多内容 - 真的需要更多地学习它。 - Christian.KTask
构造函数(https://blog.stephencleary.com/2014/05/a-tour-of-task-part-1-constructors.html)。 - Stephen Cleary