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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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