我在带有双向流的iOS中使用grpc。

对于我要写入的流,我将GRXWriter子类化,然后从后台线程对其进行写入。

我想尽快。但是,我看到GRXWriter的状态在startedpaused之间切换,并且在paused状态下向其写入数据时,有时会出现异常。我发现在编写之前,我必须等待GRXWriter.state变为started。这真的有要求吗?仅当GRXWriter的状态为started时才允许写入吗?它经常在startedpaused之间切换,这好像让我慢下来了。

此状态检查的另一个问题是我的代码看起来很丑。还有其他更好的方法可以使用双向流吗?在C#grpc中,我得到的是我自由编写的流。

编辑:我想我问的原因是:在写到GRXWriter的线程中,我有一个while循环,该循环不断检查state是否为started,如果不是,则不执行任何操作。有没有比轮询state更好的方法呢?

最佳答案

GRXWriter暂停,因为gRPC Core一次仅接受一个挂起的写操作。下一个必须等​​到第一个完成。因此,GRPCCall实例将通过修改状态来阻止编写器,直到之前的写操作完成为止!

在例外方面,我不确定您为什么会遇到问题。 GRXWriter更像是一个抽象类,似乎您通过继承它来实现了自己的实现。如果您确实想这样做,可以参考内部实现GRXBufferedPipe。特别是,如果您要避免在循环中等待写入,那么在GRXWriter状态的setter中再次写入应该是一个不错的选择。

09-03 21:17