package cn.bunny.demo6;

import io.netty.channel.EventLoop;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.util.concurrent.DefaultPromise;
import io.netty.util.concurrent.Promise;
import lombok.extern.slf4j.Slf4j;

import java.util.concurrent.ExecutionException;

@Slf4j
public class TestNettyPromise {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        // 准备EventLoop 对象
        EventLoop eventLoop = new NioEventLoopGroup().next();
        // 可以创建promise 结果容器
        Promise<Integer> promise = new DefaultPromise<>(eventLoop);

        new Thread(() -> {
            // 任意线程进行计算
            System.out.println("开始计算...");
            // 计算完成后向promise填充结果
            try {
                Thread.sleep(1000);
            } catch (InterruptedException exception) {
                exception.printStackTrace();
            }

            promise.setSuccess(80);
        }).start();
        // 除了可以等待结果，也可以处理异常
        log.debug("等待结果...");
        log.debug("结果是：{}", promise.get());
    }
}
