我试图理解 C# async/await 并观察到这种令人困惑的行为,其中异步方法不执行过去Task.Delay的调用。
考虑以下 -
class Program
{
static void Main(string[] args)
{
Program p = new Program();
p.MakeBreakfast();
}
public async Task MakeBreakfast()
{
await BoilWater();
StartToaster();
PutTeainWater();
PutBreadinToaster();
SpreadButter();
}
public async Task BoilWater() { Console.WriteLine("BoilWater start"); await Task.Delay(30); Console.WriteLine("BoilWater end"); }
public async Task StartToaster() { Console.WriteLine("StartToaster start"); await Task.Delay(1); Console.WriteLine("StartToaster end"); }
public async Task PutBreadinToaster() { Console.WriteLine("PutBreadinToaster start"); await Task.Delay(2000); Console.WriteLine("PutBreadinToaster end"); }
public async Task PutTeainWater() { Console.WriteLine("PutTeainWater start"); await Task.Delay(30); Console.WriteLine("PutTeainWater end"); }
public async Task SpreadButter() { Console.WriteLine("SpreadButter start"); await Task.Delay(10); Console.WriteLine("SpreadButter end"); }
}
它的输出将是 -
Boilwater Start
Press any key to continue...
“Boilwater end”语句和所有其他方法调用发生了什么?如果我只将 async/await 放在 BoilWater 方法中,我会得到相同的输出。
如果我从所有方法调用中删除 await -
public async Task MakeBreakfast()
{
BoilWater();
StartToaster();
PutTeainWater();
PutBreadinToaster();
SpreadButter();
}
Now, the output is -
BoilWater start
StartToaster start
PutTeainWater start
PutBreadinToaster start
SpreadButter start
Press any key to continue . . .
现在,“结束”语句发生了什么?在这些示例中,async await 发生了什么?
慕容708150
跃然一笑
青春有我
相关分类