gobrs-async icon indicating copy to clipboard operation
gobrs-async copied to clipboard

回调能否加个异步执行开关

Open OmegaLzx opened this issue 3 years ago • 7 comments

回调一般与主流程无关,子任务也不需要回调的结果

OmegaLzx avatar Jun 24 '22 14:06 OmegaLzx

目前的flow a->b->c a执行完b再执行c

如果配置成 a->b a->c 变成a执行完就会同时执行b和c(b的线程可能复用a的线程)

你说的意思是不是这样 (假设b你认为是异步,不需要等待) 不管上面的哪一种 b都得在新的线程中执行,且不参与flow中 也不需要等待结果?

yuzd avatar Jun 26 '22 00:06 yuzd

不是的,是指在成功回调和失败回调中,成功回调一般都是一些异步的通知动作,失败回调可能是一些异步的记录日志操作之类,这部分应该有个是否以异步执行的开关。

OmegaLzx avatar Jun 26 '22 09:06 OmegaLzx

不是的,是指在成功回调和失败回调中,成功回调一般都是一些异步的通知动作,失败回调可能是一些异步的记录日志操作之类,这部分应该有个是否以异步执行的开关。

这个开关是想根据某种条件判断是否执行? 那在回调的成功或失败的内部通过TaskSupport 拿到请求参数或者返回结果,进行自定义的判断是否可以满足你的需求

Memorydoc avatar Jun 26 '22 14:06 Memorydoc

可以满足的。是我忽略了TaskSupport的作用了。 但还是希望能同时提供支持声明式和编程式的两种使用方式

OmegaLzx avatar Jun 26 '22 17:06 OmegaLzx

可以满足的。是我忽略了TaskSupport的作用了。 但还是希望能同时提供支持声明式和编程式的两种使用方式 如果可以举个例子(伪代码就行)就更好示意了

yuzd avatar Jun 27 '22 00:06 yuzd

  1. 希望能提供注解的方式去配置任务的回调是否是以异步去执行的
@Task(AsyncCallback = true)

目前的异步回调方式是自已去提交一个任务,并且这种回调方式的异常没有被全局异常捕获,或者说异常已经脱离了框架控制

    @Override
    public void onSuccess(TaskSupport support) {
        future = support.executorService.submit(() -> {
            try {
                log.info("AService onSuccess Begin");
                Thread.sleep(5000);
                log.info("AService onSuccess Finish");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return 1000;
        });
    }

OmegaLzx avatar Jun 28 '22 13:06 OmegaLzx

  1. 希望能提供注解的方式去配置任务的回调是否是以异步去执行的
@Task(AsyncCallback = true)

目前的异步回调方式是自已去提交一个任务,并且这种回调方式的异常没有被全局异常捕获,或者说异常已经脱离了框架控制

    @Override
    public void onSuccess(TaskSupport support) {
        future = support.executorService.submit(() -> {
            try {
                log.info("AService onSuccess Begin");
                Thread.sleep(5000);
                log.info("AService onSuccess Finish");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return 1000;
        });
    }
``

回调的内部再异常就需要自己控制了; 异步回调有好几种: 成功、失败、前置、后置 , 你希望通过注解属性只控制 onSuccess? 还是 都用一个注解属性控制所有的回调。如果每个回调都分别控制得设置多个注解属性。

Memorydoc avatar Jun 29 '22 02:06 Memorydoc