I have a while
-loop that should repeat the program until a certain condition is met. Inside this loop I call an async
function, which prints out a message for me. Here is the (cut-short) code:
private void InitializeMessageSystem ( )
{
do
{
// Do stuff
await printMessage ("Hello World!");
Console.ReadKey();
} while (condition != true)
}
And here the function 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(" ");
}
}
Edit: Here's the call from the main function:
static void Main (string[] args)
{
InitializeMessageSystem();
Console.ReadKey();
}
Question
Why does my program exit, when I press a key while the function is not yet completed? I thought the program would wait for the Console.ReadKey()
until the function PrintMessage()
is completed?
Your problem is that await
returns the control flow of the program to the caller of the function. Normally execution is continued at that point when the asynchronous task you await finishes.
So control is returned to your main function as you wait for printMessage
and main
now waits for a key input. As you hit the key main
returns to the OS and your process (including all asynchronous tasks) terminates.
Change your InitializeMessageSystem
to
private async Task InitializeMessageSystem ( )
and change the code in main
to
InitializeMessageSystem().Wait();
to wait until InitializeMessageSystem
finishes completely before waiting for the key.
Collected from the Internet
Please contact [email protected] to delete if infringement.
Comments