我有一个while循环,应该重复该程序,直到满足某个条件.在这个循环中我调用异步函数,它为我打印一条消息.这是(剪短)代码:
private void InitializeMessageSystem ( ) { do { // Do stuff await printMessage ("Hello World!"); Console.ReadKey(); } while (condition != true) }
而这里的功能 printMessage()
private static async Task printMessage (string message, int spd = 1) { int delay = 50 / spd; string[] words = message.Split(' '); int index = 1; for (int word = 0; word < words.Length; word++) { char[] current = words[word].ToCharArray(); if (index + current.Length > Console.WindowWidth) { Console.WriteLine(); index = 1; } for (int c = 0; c < current.Length; c++) { Console.Write(current[c]); await Task.Delay(delay); } Console.Write(" "); } }
编辑 来自main函数的调用:
static void Main (string[] args) { InitializeMessageSystem(); Console.ReadKey(); }
问题
为什么我的程序退出,当我在功能尚未完成时按一个键?我以为程序会等到Console.ReadKey()
功能printMessage()
完成之后?
您的问题是将await
程序的控制流程返回给函数的调用者.通常,当您等待的异步任务完成时,将继续执行.
因此,当您等待printMessage
并main
等待键输入时,控制将返回到您的主函数.当您点击键main
返回操作系统时,您的进程(包括所有异步任务)将终止.
改变你InitializeMessageSystem
的
private async Task InitializeMessageSystem ( )
并将代码更改main
为
InitializeMessageSystem().Wait();
InitializeMessageSystem
在等待钥匙之前等到完全完成.