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

如何异步处理ServiceStack的ServerEventsClient的OnMessage事件

实现全量SSE消息异步处理的方案

你原本使用的同步OnMessage回调有对应的异步版本适配,可实现所有推送消息的异步处理,不需要使用单次拉取消息的API:

var sse = new ServerEventsClient(apiUrl);
// 注册异步回调,所有服务端推送的消息都会触发该回调
sse.OnMessageAsync = async (serverEventMessage) =>
{
    // 你的异步业务处理逻辑,消息按推送顺序触发,无并发问题
    await HandleResponseAsync(serverEventMessage);
};
// 异步启动SSE连接
await sse.StartAsync();

文档示例的差异说明

部分示例使用的WaitForNextMessageAsync()这类单次等待API,仅适用于需要获取单条特定消息的场景,不会持续处理后续推送。如果你需要处理所有服务端返回的响应,使用上述OnMessageAsync全局异步回调即可,只要SSE连接保持正常,所有推送的消息都会按顺序进入回调处理,完全适配大量请求后批量接收响应的场景。

注意事项

  • 异步回调内请自行处理业务异常,未捕获的异常会触发SSE连接断开
  • 如果单条消息处理耗时较长,建议引入Channel作为缓冲队列,先将消息写入队列再由后台消费,避免阻塞SSE消息接收线程
  • 可通过配置OnReconnectAsync回调实现异常断开自动重连,避免消息丢失

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 08:15:03