问题描述
我有一个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?