zoukankan      html  css  js  c++  java
  • ABP .Net Core 调用异步方法抛异常A second operation started on this context before a previous asynchronous operation completed

    1、  问题描述

    最近使用ABP .Net Core框架做一个微信开发,同时采用了一个微信开发框架集成到ABP,在微信用户关注的推送事件里调用了一个async 方法,由于没有返回值,也没做任何处理,本地调试也OK,但一发布到线上就有问题,微信公众号关注成功,也有推送消息过来,但微信用户一直保存不上,查看日志会有个异常信息:

    System.NotSupportedException: A second operation started on this context before a previous asynchronous operation completed. Use 'await' to ensure that any asynchronous operations have completed before calling another method on this context. Any instance members are not guaranteed to be thread safe.

     

    2、  问题分析和解决方案

    通过分析,主要问题是在asyncawait需成对出现,但我这里是集成第三方微信框架,推送事件的方法并不能直接改成异步方法,同时保存用户数据的方法没有返回结果,不能使用await。最后在官方github issue列表找到了解决方法,同步方法调用异步方法AsyncHelper.RunSync,修改发布后,该问题解决。

    修改代码如下:

    public override void Subscribe(RequestMessageEvent_Subscribe requestMessage)
    {
                //获取微信用户信息
                var wechatUser = Senparc.Weixin.MP.AdvancedAPIs.UserApi.Info(appId, requestMessage.FromUserName);
     
                //关注公众号
                AsyncHelper.RunSync(() => _wChatUserAppService.SubscribeAsync(requestMessage.FromUserName, wechatUser.nickname, wechatUser.headimgurl, requestMessage.EventKey, requestMessage.Ticket) );
    }
    

      

    参考官方github issue链接:

    https://github.com/aspnetboilerplate/aspnetboilerplate/issues/3324

  • 相关阅读:
    Maven 学习笔记——Maven和Eclipse(2)
    Maven 学习笔记——Maven环境配置(1)
    Selenium WebDriver VS Selenium RC
    ASP.NET_SessionId
    'NuGet.VisualStudio.Interop 报错
    HTTP Error 403.14 Forbidden
    关于Python字符编码encode和decode
    zabbix安装步骤
    centos7 上搭建私有云
    Python读写改Excel的方法
  • 原文地址:https://www.cnblogs.com/donaldtdz/p/9468581.html
Copyright © 2011-2022 走看看