首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >getUpdate()方法在AggregateException运行数小时后无法工作。

getUpdate()方法在AggregateException运行数小时后无法工作。
EN

Stack Overflow用户
提问于 2017-10-05 02:35:36
回答 2查看 1K关注 0票数 0

我有一些电报机器人C#应用程序,使用"bot.telegram“核,有同样的问题。

我通过getUpdate()方法获得用户消息和命令。下面有一个简单的例子:

代码语言:javascript
运行
AI代码解释
复制
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的“捕捉异常”的消息,我得到了以下错误:

System.AggregateException:发生了一个或多个错误。-> Telegram.Bot.Exceptions.ApiRequestException:请求超时-> System.Threading.Tasks.TaskCanceledException:任务被取消。在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task任务)在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task任务)在System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task任务)在Telegram.Bot.TelegramBotClient.d__1251.MoveNext() --- End of inner exception stack trace --- at Telegram.Bot.TelegramBotClient.<SendWebRequestAsync>d__1251.MoveNext() -内部异常堆栈跟踪- System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)。Threading.Tasks.Task1.GetResultCore(Boolean waitCompletionNotification) at System.Threading.Tasks.Task1.get_Result() at mahramanehBot.Main.GetUpdates()在C:\mahramanehBot.Main.GetUpdates\Soroush\documents\visual studio 2015\Projects\mahramanehBot\mahramanehBot\Main.cs:line 45 ->(内部异常#0) Telegram.Bot.Exceptions.ApiRequestException:请求超时-> System.Threading.Tasks.TaskCanceledException:任务被取消。在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task任务)在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task任务)在System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task任务)在Telegram.Bot.TelegramBotClient.d__1251.MoveNext() --- End of inner exception stack trace --- at Telegram.Bot.TelegramBotClient.<SendWebRequestAsync>d__1251.MoveNext()<

在没有停止的情况下,我应该怎么做才能使“从用户那里获取消息和命令”工作?

我通过将代码放在“尝试”之后解决了这个问题:

代码语言:javascript
运行
AI代码解释
复制
            catch (AggregateException e)
        {
            Thread a = new Thread(GetUpdates);
            a.Start();
        }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-05 02:48:55

更新可能会超时,您需要处理这个问题--我猜应用程序崩溃了?

捕获异常并处理结果(最可能的方法是忽略它)。您还可能需要等待结果。

代码语言:javascript
运行
AI代码解释
复制
        while (true)
        {
            try
            {
                updates = await bot.GetUpdatesAsync(offset, 100, 360000);

                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 (ApiRequestException ex)
           {
                //handle or ignore
           }
        }
票数 1
EN

Stack Overflow用户

发布于 2017-10-09 22:22:06

通常用于调试的getUpdates。为了发布你的机器人,你需要使用电报Webhook看这个

getUpdates是一种拉力机构,setWebhook是一种推杆。在getUpdates上使用Web钩子有一些优点:

  1. 避免你的机器人经常要求更新。
  2. 避免在代码中使用某种轮询机制。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46583569

复制
相关文章
Apache编译后无法正常工作
因为某个场景的需求,要在一个国产系统Rocky4.2(国产凝思4.2操作系统)上安装Apache,虽说此系统是基于Redhat 5.8开发的,但是发现yum安装源包管理,RPM命令倒是能用,但是底层依赖完全没有,这就尴尬了,so,只能源码编译安装了。
后场技术
2020/09/03
2.8K0
SignalR 在IE中无法工作 - Internet Explorer
运行基于SignalR的超线程上载器的代码,发现SignalR 在IE 9上居然没法工作了,提示如下: 提示很明显,需要json2.js的支持。 使用Nuget 搜索json2.js 并安装: 在引用
张善友
2018/01/29
3.3K0
SignalR 在IE中无法工作 - Internet Explorer
Kali-Linux 安装后无法登录【解决方法】
在安装完Kali-Linux系统后,尝试以root用户登录系统,正确输入密码后,仍然无法登录,提示:Sorry, that didn't work.Please try again.
团团生活志
2022/08/16
5K0
vue在IE下无法正常工作,Promise未定义?
用vue写了一个日历组件,在Firefox、Edge、Chrome以及360等浏览器极速模式中运行一切正常,如图:
Yiiven
2022/12/15
4.2K0
vue在IE下无法正常工作,Promise未定义?
IDEA修改 .vmoptions 文件后导致无法启动解决方法
今天在破解IDEA修改 .vmoptions 文件添加-javaagent时补丁路径填写错误,导致Idea无法启动。
kirin
2020/12/08
6.1K0
IDEA修改 .vmoptions 文件后导致无法启动解决方法
在 Google 工作十年后的感悟
点击 机器学习算法与Python学习 ,选择加星标 精彩内容不迷路 本文转自Python猫 最近读到了一位在 Google 工作10年+的“老”工程师关于技术、管理和职场生涯的感悟。 我看完后觉得很有收获,因此在这里也分享给大家。以下是全文,后文中的「我」均指「原作者」。 ---- 正文 我在 Google 呆了10年半,离开时的头衔/职位是 Staff Software Engineer / Manager。大致分三期: 前两年关注 Linux 桌面搜索产品和 Google 的开源项目;中间三年花
昱良
2022/03/28
4080
nginx https配置后无法访问,可能防火墙在捣鬼
发现已经在监听了,那肯定是配置问题。 检查配置没问题,重新生成证书等方法也还是无法访问,甚至在别的机器上https的配置copy过来依然无法访问
全栈程序员站长
2022/07/07
2.8K0
nginx https配置后无法访问,可能防火墙在捣鬼
[MySQL] macOS 下安装MySQL后无法在系统配置中打开
错误提示:Could not load MySQL preference pane.(由于我的是英文系统,提示的是英文,中文的提示预计不同)
用户2353021
2020/05/11
2.7K0
[MySQL] macOS 下安装MySQL后无法在系统配置中打开
tree组件在for循环中无法使用getCheckedNodes这个方法
原理: 通过鼠标点击拿到选中的id,然后判断数组中存不存在这个id,有就删除,没有就添加这个id;
用户4344670
2019/08/28
3.5K0
tree组件在for循环中无法使用getCheckedNodes这个方法
WebStorm新建Git分支后无法删除的原因及解决方法
最后找到问题所在,在编辑器右下角的 Git 选择 master 然后 Checkout 检出一下就可以了。
德顺
2019/11/13
1.2K0
WebStorm新建Git分支后无法删除的原因及解决方法
[1058]centos修改/etc/fstab后无法启动
今天做实验,增加了一个磁盘sdb1,而且也增加了自动挂载的功能/etc/fstab里增加了记录。
周小董
2021/10/28
1.5K0
手机端CSS :hover点击后返回无法取消的解决方法
a:visited 英文visited就是访问过的意思,代表这段文本被点击之后的属性。
德顺
2019/11/13
3.9K0
手机端CSS :hover点击后返回无法取消的解决方法
此工作站和主域间的信任失败原因_电脑域改为工作组后无法登录
完整的系统日志报错: The directory server failed to automatically update service account, dns name and/or port information. This operation will be tried again at the following interval. Interval (minutes): 5
全栈程序员站长
2022/11/02
2.2K0
此工作站和主域间的信任失败原因_电脑域改为工作组后无法登录
【运维探讨】RPA落地实践,提升IT运维工作效能!
RPA( Robotic Process Automation,机器人流程自动化)是一种生产力工具,允许用户配置一个或多个脚本(或称为“机器人”),可以模拟特定的操作或整个业务或IT流程中的步骤,包括操作数据、在不同应用程序之间传递数据、触发响应或执行事务等。
嘉为蓝鲸
2020/09/10
2.5K0
【运维探讨】RPA落地实践,提升IT运维工作效能!
统计代码行数的方法梳理
在日常运维工作中,会碰到对一项项目下的代码行数进行统计的需求,下面对代码行数的统计方法进行梳理,以供参考。 1)最简单的是使用wc -l直接进行代码行数统计。(wc的几个参数的解释:-c 统计字节数;-l 统计行数;-w统计字数) 1)统计当前目录下的index.php文件的行数 [root@huanqiu_web1 ~]# cat index.php |wc -l 17 2)统计web目录下,js文件数量: [root@huanqiu_web1 ~]# find web/ -name "*.js" |
洗尽了浮华
2018/01/23
3.1K0
在操作系统重启后恢复应用程序的工作状态
发布于 2018-01-21 13:29 更新于 2018-09-01 00:13
walterlv
2018/09/18
2.3K0
点击加载更多

相似问题

Arduino LCD在+-24小时后无法正常工作

121

AggregateException:有些服务无法构建

230

工作几小时后wcf服务方法的错误

21

库经过几个小时的修复后无法工作

13

几个小时后我的mergeSort无法正常工作

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文