Разрешение ChannelPromise с возвращаемым значением в Netty? - PullRequest
0 голосов
/ 27 апреля 2018

У меня нечастая и медленная операция, которая иногда происходит на моих каналах. Когда требуется эта операция, необходимо остановить всю обработку в канале до завершения операции и проверки возвращаемого значения. Я думаю, что обработать это асинхронно и отключить AUTO_READ, пока эта операция не завершена. Я не хочу блокировать поток ввода-вывода для этой операции.

Первоначально я думал, что мой сервисный код разрешит ChannelPromise и передаст возвращаемое значение для операции. Но похоже, что нет способа установить возвращаемое значение для ChannelPromise?

Другая мысль состоит в том, чтобы служба возвращала CompletableFuture и чтобы мой код обработчика регистрировал асинхронный обратный вызов с помощью thenApply (). Затем код обратного вызова помещает логику обратного вызова в цикл событий канала для обеспечения безопасности потока.

Есть ли предпочтительный или встроенный механизм для получения результата асинхронной операции с Netty? Почему ChannelPromise не предоставляет способа установить возвращаемое значение?

1 Ответ

0 голосов
/ 28 апреля 2018

Вы можете просто использовать Promise<T> для него.

Вы можете создать его с помощью:

Promise<ReturnType> promise = channel.eventLoop().newPromise<ReturnType>();
...