Добрый день. Я пытаюсь понять как работают async/await. В коде ниже: два цикла один рисует число на первой строке консольного окна, второй - на второй. Поскольку функция ShowMessage сохраняет и восстанавливает состояние, то она не должна конфликтовать сама с собой откуда бы ее не вызывали "синхронно" (что, я полагаю, должен делать механизм async/await, т.е. он должен прерывать основной поток где бы он не находился и вызывать эту функцию в этом потоке, затем возвращать управление обратно). Но запустив приложение можно видеть, что текст выводится куда попало, как было бы при конфликте потоков.
Подскажите, что я делаю не так?
public static void Main()
{
DrawCounter();
while(true) ShowMessage(DateTime.Now); // A
}
public static async void DrawCounter()
{
int counter = 0;
while(true) // B
{
ShowMessage(counter++, 0, 1, ConsoleColor.Red);
await Task.Delay(1); // C
}
}
public static void ShowMessage(object Message, int Left = 0, int Top = 0,
ConsoleColor Color = ConsoleColor.Gray)
{
int oldLeft = Console.CursorLeft;
int oldTop = Console.CursorTop;
var oldColor = Console.ForegroundColor;
Console.ForegroundColor = Color;
Console.SetCursorPosition(Left, Top);
Console.Write(Message);
Console.CursorLeft = oldLeft;
Console.CursorTop = oldTop;
Console.ForegroundColor = oldColor;
}