如何解决在gRPC Steam中返回应该永远保持打开状态的新数据
我有一个gRPC服务,它将数据传输到连接的客户端,直到客户端终止连接。
我已经使用虚拟数据并使用Task.Delay,但是我在弄清楚如何将真实数据投入使用方面遇到困难。
public override async Task SubscribetoNewData(Empty request,IServerStreamWriter<MyModel> responseStream,ServerCallContext context)
{
while(true)
{
var data = await GetNewData();
await responseStream.WriteAsync(data);
}
}
// Dummy implementation
private async Task<MyModel> GetNewData()
{
await Task.Delay(5000);
MyModel output = new MyModel();
return output;
}
public void SetData(MyModel data)
{
??
}
SetData大约每5秒从类外部调用一次。发生这种情况时,我不会立即将数据写入responseStream。
如何实现SetData和GetNewData以获得此功能?
解决方法
也许对您的传入MyModel数据使用ConcurrentQueue,并在您的SubscribeToNewData方法中将SemaphoreSlim设置为WaitAsync?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。