1

У меня есть телеграмм-бот, который принимает команду, после чего она выполняется бесконечно, пока не придет апдейт, а потом этот бесконечный цикл должен прерваться и приложение должно дальше работать(ждать команду). Я пытался сделать что-то на подобии этого:

CancellationTokenSource cts = new CancellationTokenSource();
    CancellationToken ct = cts.Token;
    if (message.Text == "/stop")
    {
    cts.Cancel();
    cts.Dispose();
    await client.SendTextMessageAsync(message.Chat.Id, "end");
}

await Task.Run(async () =>
{

        while (true)
        {


            if (ct.IsCancellationRequested)
                break;

            await _parserWorker.Work(message, client, message.Chat.Id);
            Thread.Sleep(60000);

        }


    Console.WriteLine("end");
},ct);

Но приложение полностью падает. Если не передавать ct в Task, то прерывание не выполняется.

Как можно завершить цикл без падения приложения?

Alex
  • 33
  • Приложения не падают из за цикла с задержкой в минуту. Найдите причину падения и пофиксите. – tym32167 Feb 11 '23 at 06:26
  • Но вообще, чтобы что то выполнять раз в минуту, я бы наверное использовал таймер, чем синхронный цикл. На крайняк асинхронный цикл и то лучше будет. – tym32167 Feb 11 '23 at 06:28
  • Здесь неправильно практически всё. Пример рабочей реализации по ссылке вверху над вопросом. Научитесь использовать try-catch. – aepot Feb 11 '23 at 12:40

0 Answers0