好像我过去曾经遇到过这个问题的答案,但现在我无法找到它.
假设我有两个异步方法,Method1和Method2.如果我需要按顺序调用Method1然后调用Method2(读取,Method1必须在Method2之前完成),以下代码是否正确?
await Method1();
await Method2();
Run Code Online (Sandbox Code Playgroud)
根据此处对另一个SO问题的接受答案的信息以及MSDN文章中的信息,我相信这是正确的方法.此外,这段代码似乎可行,但我不想引入一个稍微难以追踪的微妙错误.
我正在试验 async-await 并且我遇到了这种相当奇怪的行为,至少对我来说是这样。
我创建了三种模拟长时间运行任务的方法。
考虑两个按钮单击处理程序:
对于 button1_click,经过的时间约为 6000 毫秒,而 button2_click 约为 3000 毫秒。
我无法理解为什么会发生这种情况,即 6000 毫秒与 3000 毫秒。
private async Task<string> TaskOne()
{
await Task.Delay(1000);
return "task one";
}
private async Task<string> TaskTwo()
{
await Task.Delay(2000);
return "task two";
}
private async Task<string> TaskThree()
{
await Task.Delay(3000);
return "task three";
}
//time elapsed = 6000+ms
private async void button1_Click(object sender, EventArgs e)
{
var watch = new Stopwatch();
watch.Start();
await TaskOne();
await TaskTwo();
await TaskThree();
watch.Stop();
textBox3.Text = watch.ElapsedMilliseconds.ToString();
} …Run Code Online (Sandbox Code Playgroud)