Могу ли я сделать эту асинхронную параллель? - PullRequest
0 голосов
/ 18 ноября 2018

Я только начал свой проект, и я хочу знать, возможно ли сделать асинхронную работу без задач и ждать, как я пытался это сделать. Это то, что я хочу сделать: я хочу подождать 2 секунды, а затем что-то сделать, но если я нажму 1 на цифровой клавиатуре, ожидание будет пропущено. Это все, что мне нужно сейчас:

static async void DelayedWork(int body, int noveBody)
    {
        ConsoleKey consoleKey = Console.ReadKey().Key;
        if (consoleKey == ConsoleKey.NumPad1)
        {
            DoSomething();    
        }
        else
        {
        }
    }

static void Game()
    {
        DelayedWork();
        System.Threading.Thread.Sleep(2000);
        DoSomething();
    }

Требуется ли ожидание или задание для этого? Потому что на этом этапе это не работает ...

1 Ответ

0 голосов
/ 19 ноября 2018

У вас есть две разные вещи, которые вы хотите сделать одновременно. Один из них - ждать numpad 1. Другой - ждать 2 секунды. Затем вы хотите сделать что-то другое, что не имеет отношения к вашему вопросу. Вот решение с использованием async / await:

var task1 = Task.Delay(2000);
var task2 = Task.Run(()=>while (Console.ReadKey()!=ConsoleKey.NumPad1){});
await Task.WhenAny(new[] { task1, task2 });

Я не компилировал это, поэтому в нем могут быть некоторые ошибки, но я надеюсь, вы поняли.

...