求助:DotPulsar未实现SendAsync,如何在C#中异步生产Pulsar消息?
C#中用DotPulsar异步发Pulsar消息的可行方案
优先用内置异步方法(先确认版本)
DotPulsar的IProducer<T>本身就提供了SendAsync异步发送方法,如果你当前版本找不到,大概率是用了旧版本,建议先升级到最新稳定版。示例代码如下:
using DotPulsar; using DotPulsar.Extensions; // 初始化客户端 var client = PulsarClient.Builder() .ServiceUrl("pulsar://你的Pulsar地址:6650") .Build(); // 创建生产者 var producer = await client.NewProducer() .Topic("目标Topic名") .CreateAsync(); // 构造消息并异步发送 var msg = new Message("测试消息内容"); await producer.SendAsync(msg); // 用完记得释放资源 await producer.DisposeAsync(); await client.DisposeAsync();
临时兼容方案:用Task.Run包装同步Send
如果暂时没法升级版本,也可以用Task.Run把同步的Send方法包成异步调用,避免阻塞主线程:
await Task.Run(() => producer.Send(msg));
注意:这只是权宜之计,本质是把同步操作扔到后台线程,不是真正的IO异步,不建议长期用。
批量异步发送(提升效率)
如果要发多条消息,直接用批量版的SendAsync就行,比单条发效率高:
var msgList = new List<Message> { new Message("消息1"), new Message("消息2"), new Message("消息3") }; await producer.SendAsync(msgList);
内容的提问来源于stack exchange,提问作者tpkurilla
相关产品推荐
相关产品推荐

