Netty-promise

 

public class TimeEncoder extends ChannelOutboundHandlerAdapter {

    @Override
    public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception {
        UnixTime m = (UnixTime)msg;
        ByteBuf encoded = ctx.alloc().buffer(4);
        encoded.writeInt((int)m.value());
        ctx.write(encoded,promise);//(1)
        promise.setSuccess();
    }
    
}

 

报:Failed to mark a promise as success because it has succeeded already

解决:

法1:write方法中的promise去掉。因为,write中带参数 promise,会自动执行promise.setSuccess();

法2:去掉promise.setSuccess();

 

promise目的是通知ChannelFutureListener执行。

 

posted @ 2018-10-30 09:30  遥远2  阅读(581)  评论(0编辑  收藏  举报