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

Blazor WASM调用第三方API遇PlatformNotSupportedException问题求助

问题场景

我们在开发Blazor WASM项目,流程是用户填完表单后创建实体存入数据库,接着生成PDF并提交到外部消息平台,调用的是第三方提供的client.SendMsgAsync()方法,代码如下:

foreach (var user in userIdentifiers) { 
  var response = await client.sendMsgAsync(
                                accesscode: paswoord,
                                userIdentifier: user,
                                title: "Lovapaanvraag",
                                body: "Zie .pdf bijlage voor uitgebreide informatie",
                                senderIdentifier: senderIdentifier,
                                attachments: jsonString,
                                coaccount: 0,
                                copyToLVS: false);

  int resultaat = Convert.ToInt32(response);
  if (resultaat != 0) geslaagd = false;      
}

这个第三方API调用成功时会返回值为0的object类型结果。在其他项目中做单元测试一切正常,但在Blazor WASM中运行时抛出错误:

System.PlatformNotSupportedException: Cannot wait on monitors on this runtime.

已确认这是线程阻塞问题,试过Task.WhenAll()、Task.Delay()都无效,知道需要抽离异步工作但不清楚具体实现方式。

更新:有评论指出问题根源是该第三方服务内部持有锁,而Blazor WASM运行时不支持这类锁操作,需要寻找替代方案。

解决方案

Blazor WASM运行在浏览器单线程环境中,不支持传统的线程监视器、锁等待操作,而第三方API内部使用了这类不兼容代码,最可靠的解决方式是将第三方API的调用逻辑迁移到后端服务:

  • 搭建一个ASP.NET Core后端接口,在接口内部调用client.SendMsgAsync()方法
  • Blazor WASM前端通过HTTP请求调用该后端接口,由后端完成与外部消息平台的交互
  • 后端运行在支持多线程和锁操作的环境中,不会出现平台不支持的错误

如果一定要在前端尝试,也可以用Task.Run包装API调用,但Blazor WASM的线程池限制较多,成功率不高,还是后端代理方案更稳定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 20:25:09