GRPC异步响应流C#如何从handler外部为RPC生成流响应值?(具体来自IObservable)我目前正在执行以下操作,但这会产生跨线程问题,因为AnRxObservable在RPC处理程序之间共享...Subscribe(value=>{responseStream.WriteAsync(newResponseProto{Value=value});});//等待RPC被取消(我的扩展方法//返回一个在CancellationToken被取消时完成的任务)awaitcontext.CancellationToken.WhenCancelled();//处理缓冲流bufferedStream.Dispose();//处理订阅者(告诉rx我们不再订阅了)subscription.Dispose();返回Task.FromResult(1);这段代码感觉不对……但我看不到从RPC处理程序外部创建的共享源流式传输RPC响应的任何其他方式。通常,当您尝试从推模型(IObservable)转换为拉模型(枚举响应以写入和写入它们)时,您需要一个中间消息缓冲区-例如blockingQueue。然后,处理程序主体可以是一个异步循环,它尝试获取队列的下一条消息(最好是异步的)并将其写入responseStream。另请注意,gRPCAPI仅允许您在任何给定时间有1个飞行中响应-而您的代码片段不符合此要求。因此,您需要在开始另一次写入之前等待WriteAsync()(这是您需要中间队列的另一个原因)。此链接可能有助于解释推与拉模式:何时使用IEnumerable与IObservable?以上就是C#学习教程的全部内容:GRPC异步响应流程C#分享。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权请点击右侧联系管理员删除。如需转载请注明出处:
