我在带有双向流的iOS中使用grpc。
对于我要写入的流,我将GRXWriter
子类化,然后从后台线程对其进行写入。
我想尽快。但是,我看到GRXWriter
的状态在started
和paused
之间切换,并且在paused
状态下向其写入数据时,有时会出现异常。我发现在编写之前,我必须等待GRXWriter.state
变为started
。这真的有要求吗?仅当GRXWriter
的状态为started
时才允许写入吗?它经常在started
和paused
之间切换,这好像让我慢下来了。
此状态检查的另一个问题是我的代码看起来很丑。还有其他更好的方法可以使用双向流吗?在C#grpc中,我得到的是我自由编写的流。
编辑:我想我问的原因是:在写到GRXWriter
的线程中,我有一个while
循环,该循环不断检查state
是否为started
,如果不是,则不执行任何操作。有没有比轮询state
更好的方法呢?
最佳答案
GRXWriter暂停,因为gRPC Core一次仅接受一个挂起的写操作。下一个必须等到第一个完成。因此,GRPCCall实例将通过修改状态来阻止编写器,直到之前的写操作完成为止!
在例外方面,我不确定您为什么会遇到问题。 GRXWriter更像是一个抽象类,似乎您通过继承它来实现了自己的实现。如果您确实想这样做,可以参考内部实现GRXBufferedPipe。特别是,如果您要避免在循环中等待写入,那么在GRXWriter状态的setter中再次写入应该是一个不错的选择。