Console.ReadLine в задаче, вызывающей побочные эффектыC#

Место общения программистов C#
Anonymous
Console.ReadLine в задаче, вызывающей побочные эффекты

Сообщение Anonymous »

Я хочу зациклиться и спросить пользователя, хочет ли он продолжить. Если какое-то время нет ответа, все равно зациклитесь.

Код: Выделить всё

while (true)
{
Console.WriteLine("\nDo you want to continue? (Type 'no' or 'exit' to break, or wait 5 seconds to continue)");
var cts = new CancellationTokenSource();
var readTask = Task.Run(Console.ReadLine, cts.Token);
var timeoutTask = Task.Delay(5000);
var completedTask = await Task.WhenAny(readTask, timeoutTask);
if (completedTask == timeoutTask)
{
Console.WriteLine("No response - continuing automatically...");
cts.Cancel();
}
else
{
string? response = await readTask;
if (response != null &&
(response.Equals("no", StringComparison.OrdinalIgnoreCase) ||
response.Equals("exit", StringComparison.OrdinalIgnoreCase)))
{
Console.WriteLine("Exiting loop. Goodbye!");
break;
}
else
{
Console.WriteLine("Continuing...");
Thread.Sleep(1500);
}
}
}
У меня есть две проблемы с этим кодом
  • Он не всегда работает, первая итерация работает, но после первой итерации он иногда зацикливается, даже если я набираю «нет».
  • Он создает задачи, которые ждут вечно, это требует оптимизации, я думаю.


Подробнее здесь: https://stackoverflow.com/questions/797 ... de-effects

Вернуться в «C#»