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
相关产品推荐
相关产品推荐

