J'ai quelques applications de C# de télégramme qui utilisent le nobget "bot.telegram" qui ont le même problème. Je reçois le message et les commandes de l'utilisateur par la méthode getUpdate(). il est un simple exemple ci-dessous:La méthode getUpdate() ne fonctionne pas après quelques heures par AggregateException
private void Form1_Load(object sender, EventArgs e)
{
try
{
a = new Thread(new ThreadStart(GetUpdates));
a.Start();
}
catch (Exception ex)
{
bot.SendTextMessageAsync({myId}, ex.ToString());
}
}
public void GetUpdates()
{
try
{
offset = 0;
while (true)
{
updates = bot.GetUpdatesAsync(offset, 100, 360000).Result;
foreach (var update in updates)
{
offset = update.Id + 1;
if (update.Message == null || update.Message.Text == null)
continue;
switch (update.Message.Text)
{
case "/start":
job1();
break;
case "Msg2":
job2();
break;
case "Msg3":
job3();
break;
default:
job(4)
break;
}
}
}
}
catch (Exception ex)
{
bot.SendTextMessageAsync({myId}, ex.ToString());
}
}
et au bout de quelques heures (2-24 heures), il arrête et ne reçoit pas les messages de user.In « attraper exception » Je reçois cette erreur:
System.AggregateException: One or more errors occurred. ---> Telegram.Bot.Exceptions.ApiRequestException: Request timed out ---> System.Threading.Tasks.TaskCanceledException: A task was canceled. at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task) at Telegram.Bot.TelegramBotClient.d__125
1.MoveNext() --- End of inner exception stack trace --- at Telegram.Bot.TelegramBotClient.<SendWebRequestAsync>d__125
1.MoveNext() --- End of inner exception stack trace --- at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) at System.Threading.Tasks.Task1.GetResultCore(Boolean waitCompletionNotification) at System.Threading.Tasks.Task
1.get_Result() at mahramanehBot.Main.GetUpdates() in C:\Users\Soroush\documents\visual studio 2015\Projects\mahramanehBot\mahramanehBot\Main.cs:line 45 ---> (Inner Exception #0) Telegram.Bot.Exceptions.ApiRequestException: Request timed out ---> System.Threading.Tasks.TaskCanceledException: A task was canceled. at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task) at Telegram.Bot.TelegramBotClient.d__1251.MoveNext() --- End of inner exception stack trace --- at Telegram.Bot.TelegramBotClient.<SendWebRequestAsync>d__125
1.MoveNext()<---
que dois-je faire pour que "l'obtention de messages et la commande de l'utilisateur" fonctionnent sans arrêt?
Je résolu ce problème en mettant ce code après « essayer »:
catch (AggregateException e)
{
Thread a = new Thread(GetUpdates);
a.Start();
}
merci mais comment puis-je gérer cette exception et redémarrer la réception des mises à jour instantanément dans cette "catch exception"? – Lionking89
Il faut juste ignorer cette exception et recommencer (retourner en haut de la boucle while (vrai).) Je suppose que votre application est en train de frapper le timeout, puis de s'écraser, donc de quitter la boucle. devrait permettre de réessayer - mais les exceptions asynchrones peuvent toujours provoquer une surprise ou deux. – dannymc18