Как отменить потоковый вызов GRP C? - PullRequest
0 голосов
/ 04 августа 2020

Обычно клиент может отменить вызов gRP C с помощью:

(requestObserver as ClientCallStreamObserver<Request>)
    .cancel("Cancelled", null)

Однако это отображается в Javado c:

CancellableContext withCancellation = Context.current().withCancellation();
// do stuff
withCancellation.cancel(t);

Какой из них является «правильным» способом отменить вызов клиента и сообщить серверу? 1014 *

1 Ответ

1 голос
/ 04 августа 2020

Оба варианта приемлемы и подходят.

clientCallStreamObserver.cancel(), как правило, проще, поскольку в нем меньше шаблонов. Обычно это предпочтительнее. Однако он не является потокобезопасным; это похоже на обычную отправку на StreamObserver. Это также требует прямой осведомленности с RPC; у вас не может быть кода более высокого уровня для управления отменой, поскольку он может даже не знать о RP C.

Используйте отмену Context для поточно-безопасной отмены и меньше RP C -aware отмена. Отмена контекста может использоваться в обстоятельствах, подобных прерыванию потока или будущей отмене. Не то, чтобы CancellableContext s следует рассматривать как ресурс и в конечном итоге нужно отменить, чтобы избежать утечки памяти. (context.cancel(null) может использоваться, когда контекст достигает «нормального» конца жизни.)

...