Код: Выделить всё
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