동일한 문제가있는 "bot.telegram"너겟을 사용하는 일부 텔레 그램 봇 C# 응용 프로그램이 있습니다.AggregateException에 의해 한 시간 후에 getUpdate() 메서드가 작동하지 않습니다.
getUpdate() 메소드를 통해 사용자 메시지와 명령을받습니다. 아래의 간단한 예제가있다 :
: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()<---
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());
}
}
일부 시간 후에
(2~24시간)은 중지하고 user.In "캐치 예외"메시지를 얻을하지 않습니다 나는이 오류가"메시지를 받고 명령을받는"것을 멈추지 않고 어떻게해야합니까?
내가 "노력"다음에이 코드를 넣어이 문제를 해결 :
catch (AggregateException e)
{
Thread a = new Thread(GetUpdates);
a.Start();
}
감사합니다.이 예외를 처리하고 즉시이 "캐스 예외"에서 업데이트를 즉시 다시받을 수 있습니까? – Lionking89
그냥 하나의 예외를 무시하고 다시 시도하십시오 (while (true) 루프의 맨 위로 돌아 가야합니다.) 현재 응용 프로그램이 제한 시간을 초과하면 충돌이 발생하여 루프를 종료합니다. 그냥 다시 시도 할 수 있도록해야합니다. 그러나 비동기 예외는 항상 놀람 또는 두 가지를 던질 수 있습니다. – dannymc18