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.