解决第三方平台超时问题

本文介绍了一种应对第三方平台如微信支付接口超时问题的解决方案。当数据库操作时间过长导致微信支付接口30秒超时时,通过在程序中使用Task异步处理,设置20秒的等待阈值。若Task在20秒内完成,则提交事务并返回成功状态;否则,启动新的Task回滚事务,并向微信平台返回失败状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.应用场景

     给第三方微信支付平台做接口时,接口访问数据库时间长,微信平台只等30秒,超过时交易失败.而我们的程序是不会超时的,因此造成双方交易状态不一致.

二.解决思路

   (1)数据库肯定是存在问题的,因为客观原因暂时不能解决数据库的问题.

   (2)只能从接口程序上解决问题.将原来的业务处理放入Task1并执行,主线程计时循环等待.当超过20秒时,创建Task2去等待Task1执行完后,回滚数据库事务,主线程返回失败给微信平台.如果Task1在20秒内执行完成时,跳出循环,提交数据库事务,并返回成功状态给微信平台.

三.测试代码

static string DoSql()
        {
            var connstr = ConfigurationManager.ConnectionStrings["OracleDbContext"].ToString();
            OracleConnection conn = new OracleConnection(connstr);

            conn.Open();
            OracleTransaction tr = conn.BeginTransaction();
            OracleCommand cmd1 = conn.CreateCommand();
            bool tf = false;
            Stopwatch sw = new Stopwatch();
            sw.Start();
            Console.WriteLine("-------------Main start ---------------------");
            Task t1 = new Task(() => {
                Console.WriteLine("-
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值