Как остановить бесконечный цикл?
Есть телеграмм-бот, у него есть команда, которая выполняется бесконечно, пока не придет апдейт с командой "/stop".
public override async void Execute(String command, Message message, ITelegramBotClient client, State state)
{
if (message.Text == "/stop")
StopLoop();
if(message.Text == "/start")
StartLoop(message,client);
}
private CancellationTokenSource _cts;
private async Task RunLoopAsync(CancellationToken token,Message message, ITelegramBotClient client )
{
try
{
while (true)
{
await client.SendTextMessageAsync(message.Chat.Id, "send", cancellationToken: token);
await Task.Delay(10000, token);
}
}
catch (OperationCanceledException)
{ }
}
private async void StartLoop(Message message, ITelegramBotClient client)
{
if (_cts != null)
return;
try
{
using (_cts = new CancellationTokenSource())
{
await RunLoopAsync(_cts.Token,message,client);
}
}
catch (Exception ex)
{
// ... ex.Message
}
_cts = null;
}
private void StopLoop()
{
_cts?.Cancel();
}
Для остановки цикла, я взял пример отсюда: пример
Но это не помогает. Что посоветуете сделать, чтобы можно было остановить этот цикл?
Источник: Stack Overflow на русском