1 回答

TA貢獻(xiàn)1794條經(jīng)驗(yàn) 獲得超8個(gè)贊
最簡單的方法是將 responseObserver 傳遞給長時(shí)間運(yùn)行的任務(wù):
@Override
public void getData(RequestValue requestValue, StreamObserver<ResponseValue> responseObserver) {
Runnable r = () -> {
try {
ResponseValue rv = ... // blocking code here
responseObserver.onNext(rv);
responseObserver.onCompleted();
} catch (Exception e) {
responseObserver.onError(e);
}
executor.schedule(r);
}
重要的是您在某個(gè)時(shí)間完成調(diào)用,即使發(fā)生意外錯(cuò)誤也是如此。否則你會(huì)泄漏調(diào)用(在超時(shí)發(fā)生之前保持打開狀態(tài),如果有的話)。
添加回答
舉報(bào)