我目前正在用gRpc替换旧的WCF客户端/服务器对,并决定使用protobuf-net.Grpc,因为我们已经在代码库的其他地方广泛使用了protobuf-net。然而,我在一个特定的部分遇到了一点麻烦。
原始服务的一部分是Subscribe方法,它使用IClientCallback将事件有效地发送到客户端。看看常规的gRpc,这似乎是可能的(尽管有点老生常谈),使用服务器流方法并将IServerStreamWriter对象存储在服务器上,在我们想要“触发事件”的时候写入它。
然而,对于我来说,我不太明白如何在具有IAsyncEnumerable返回类型的protobuf-net.Grpc中做类似的事情。我能想到的最接近的方法是在循环中使用Task.Wait,当我想“触发”事件时,更新一些共享集合,然后循环将检查并返回。然而,这看起来并不能很好地扩展,而且当客户端不再侦听事件时,也没有一个很好的方法来确定取消订阅。
有没有其他/更好的方法来做到这一点?
发布于 2020-02-27 06:31:54
Channel<T>,它可以通过AsAsyncEnumerable()进行调整-然后本质上充当生产者端的队列和消费者端的序列。
https://stackoverflow.com/questions/60420393
复制相似问题