0

Т.е. если в течении какого то времени не был введен правильный ответ (theard или task?), то переменной основного потока передается какое то значение. Этот код не работает, т.к. string test = await PrintAsync(); блокирует основной поток в ожидании значения

class Program
    {
    async static Task Main(string[] args)
    {

        string test = await PrintAsync();
        async Task <string> PrintAsync()
        {
            await Task.Delay(3000);
            string name = "";
            return name;
        }
        while (true)
        {
            if(test=="")
            {
                break;
            }
            Console.WriteLine("Ввод ответа");
            string text = Console.ReadLine();
            Console.WriteLine("ответ" + text);

        }

    }

}

  • Как минимум, укажите язык программирования в метках к вопросу. Также добавьте попытки, как именно вы пытались сделать. – insolor Apr 03 '23 at 06:49
  • пожалуйста, предоставьте [mcve], который демонстрирует проблему. – S. Nick Apr 03 '23 at 06:50
  • Распишите более чётко use case. Сейчас не очень понятно что и как должно всё-таки происходить. А так возможно вам нужно использовать Task.Run https://learn.microsoft.com/ru-ru/dotnet/api/system.threading.tasks.task.run – CrazyElf Apr 03 '23 at 07:14
  • Мне нужно прервать while если ответ не удовлетворит требованиям. Проверка ответа происходит на сервере. Эта строка if(test=="") выглядит вот такif(test=="" || ans=="ok" ) – Anatol Nosyrev Apr 03 '23 at 07:34
  • CrazyElf. За подсказку спасибо!. Я не знаю что применить, потоки, ассинхроность, выделить в отдельную задачу. Или комбинация нескольких – Anatol Nosyrev Apr 03 '23 at 07:37
  • Нет, вы всё-таки для начала чётко распишите в вопросе условия: сколько времени даётся на ответ? сколько попыток даётся? а время даётся на одну попытку или на все вместе взятые? и т.д. Сейчас задача не очень чётко поставлена. – CrazyElf Apr 03 '23 at 07:58
  • Спасибо всем за рассуждения. Общая задача. Нужно написать серверную игру в "Города". на сервере происходит проверка. Клиент получает сообщения ответ принят или нет. Если игрок не успел за определенное время правильно ответить игрок выбывает из игры, Можно даже разорвать соединение. и кода бы хотелось на это затратить в пределах 20 -30 строк. Все коменты обязательно изучу – Anatol Nosyrev Apr 03 '23 at 11:12
  • По поводу клиент-сервера, вот примеры – aepot Apr 03 '23 at 13:39
  • Уставший мозг выдал. Даже если получить из параллельного потока нужное значение. Это значение в цикле проверки ответа, будет ждать активации цикла. Активация цикла - ответ сервера. Но если игрок не не отправить вызов серверу, сервер не отправит ответ. Цикл не будет активирован. Вообщем. Пару дней надо отдохнуть. – Anatol Nosyrev Apr 03 '23 at 15:33
  • aepot. Вам отдельное спасибо за предоставленный код! – Anatol Nosyrev Apr 03 '23 at 15:35

0 Answers0