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