You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET WebForms中Stripe ACH异步调用流程异常问题排查

VB.NET WebForms调用Stripe ACH交易异步流程问题解决
  • 两个子程都需要标记为Async:
    按钮的事件处理程序必须是Async Sub(WebForms事件处理的特殊要求,不能返回Task),而Post_ACHAsync需要定义为Async Function并返回Task,这样才能被正确等待。

  • 必须在调用Post_ACHAsync时添加Await:
    你遇到的核心问题是遍历GridView时,直接调用Post_ACHAsync但未加Await,导致这个异步操作被“fire-and-forget”(主线程不等它完成就继续循环)。生产环境中Stripe接口响应有延迟,异步操作还没执行到后续的成功/异常处理代码,循环就已经推进甚至结束,所以看不到后续逻辑执行;而本地独立程序因为响应快,异步操作几乎同步完成,才会看起来正常。

    正确的循环写法示例:

    Async Sub btnPost_Click(sender As Object, e As EventArgs) Handles btnPost.Click
        For Each row As GridViewRow In GridView1.Rows
            ' 必须加Await,等待当前行的ACH交易处理完成再进入下一行
            Await Post_ACHAsync(row)
        Next
    End Sub
    
    Async Function Post_ACHAsync(row As GridViewRow) As Task
        Try
            ' 从GridView行中获取交易所需数据并构造参数
            Dim transferOptions = New Stripe.TransferCreateOptions With {
                ' 填充Stripe所需的交易参数
            }
            ' 等待Stripe的ACH处理完成
            Await StripeService.ProcessAchTransferAsync(transferOptions)
            
            ' 成功后的处理逻辑:更新行状态、写入日志等
            row.Cells(StatusColumnIndex).Text = "交易成功"
        Catch ex As Exception
            ' 异常处理逻辑:标记失败、记录错误信息等
            row.Cells(StatusColumnIndex).Text = $"交易失败:{ex.Message}"
        End Try
    End Function
    
  • 额外注意:
    如果不添加Await,Post_ACHAsync中的异常会被静默吞掉(因为没有等待Task完成,异常无法冒泡到调用方),你甚至看不到错误信息,这也是生产环境流程不符合预期的原因之一。

内容的提问来源于stack exchange,提问作者user30042976

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 14:24:54