微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在gRPC Steam中返回应该永远保持打开状态的新数据

如何解决在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 举报,一经查实,本站将立刻删除。