通过对比，加深了解。



### 1、基础示例

claimTask（匹配权限） 或 findTask（不需要权限）一般用于审批场景。下面的示例一般没必要，这里使用 findTask 只作展示。

```java
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.noear.solon.flow.FlowContext;
import org.noear.solon.flow.FlowEngine;
import org.noear.solon.flow.Graph;
import org.noear.solon.flow.Node;
import org.noear.solon.flow.workflow.TaskState;
import org.noear.solon.flow.workflow.Task;
import org.noear.solon.flow.workflow.controller.NotBlockStateController;
import org.noear.solon.flow.workflow.repository.InMemoryStateRepository;
import org.noear.solon.flow.workflow.WorkflowExecutor;

@Slf4j
public class NotBlockStateFlowDemo {
    NotBlockStateController stateController = new NotBlockStateController();
    InMemoryStateRepository stateRepository = new InMemoryStateRepository() {
        @Override
        public void statePut(FlowContext context, Node node, TaskState state) {
            super.statePut(context, node, state);
            //todo: 打印放这儿，顺序更真实
            if (state == TaskState.COMPLETED) {
                log.info("{} 完成", node.getId());
            }
        }
    };

    @Test
    public void case1() {
        //计算后，可获取最新状态

        WorkflowExecutor workflow = WorkflowExecutor.of(FlowEngine.newInstance(), stateController, stateRepository);
        Graph graph = getGraph();

        FlowContext context = FlowContext.of("3")
                .put("tag", "");

        Task task = workflow.findTask(graph, context);
        System.out.println("--------------------");
        Assertions.assertNotNull(task);
        Assertions.assertEquals("n3", task.getNode().getId());
        Assertions.assertEquals(TaskState.COMPLETED, task.getState());

        context = FlowContext.of("4")
                .put("tag", "n1");

        task = workflow.findTask(graph, context);
        System.out.println("--------------------");
        Assertions.assertNotNull(task);
        Assertions.assertEquals("n1", task.getNode().getId());
        Assertions.assertEquals(TaskState.WAITING, task.getState());

        //再跑（仍在原位、原状态）
        task = workflow.findTask(graph, context);
        System.out.println("--------------------");
        Assertions.assertNotNull(task);
        Assertions.assertEquals("n1", task.getNode().getId());
        Assertions.assertEquals(TaskState.WAITING, task.getState());


        context.put("tag", "n2");

        task = workflow.findTask(graph, context);
        System.out.println("--------------------");
        Assertions.assertNotNull(task);
        Assertions.assertEquals("n2", task.getNode().getId());
        Assertions.assertEquals(TaskState.WAITING, task.getState());

        context.put("tag", "");

        task = workflow.findTask(graph, context);
        System.out.println("--------------------");
        Assertions.assertNotNull(task);
        Assertions.assertEquals("n3", task.getNode().getId());
        Assertions.assertEquals(TaskState.COMPLETED, task.getState());
    }

    private Graph getGraph() {
        String task = "if(tag.equals(node.getId())){context.interrupt();}";

        Graph graph = Graph.create("tmp-" + System.currentTimeMillis(),spec->{
            spec.addStart("s").linkAdd("n0");
            spec.addActivity("n0").task(task).linkAdd("n1");
            spec.addActivity("n1").task(task).linkAdd("n2");
            spec.addActivity("n2").task(task).linkAdd("n3");
            spec.addActivity("n3").task(task).linkAdd("e");
            spec.addEnd("e");
        });

        return graph;
    }
}
```


### 打印样列

```
INFO 2026-01-13 19:01:17.173 #52042 [-main] demo.workflow.NotBlockStateFlowDemo#console: 
n0 完成
INFO 2026-01-13 19:01:17.173 #52042 [-main] demo.workflow.NotBlockStateFlowDemo#console: 
n1 完成
INFO 2026-01-13 19:01:17.173 #52042 [-main] demo.workflow.NotBlockStateFlowDemo#console: 
n2 完成
INFO 2026-01-13 19:01:17.174 #52042 [-main] demo.workflow.NotBlockStateFlowDemo#console: 
n3 完成
--------------------
INFO 2026-01-13 19:01:17.178 #52042 [-main] demo.workflow.NotBlockStateFlowDemo#console: 
n0 完成
--------------------
--------------------
INFO 2026-01-13 19:01:17.179 #52042 [-main] demo.workflow.NotBlockStateFlowDemo#console: 
n1 完成
--------------------
INFO 2026-01-13 19:01:17.179 #52042 [-main] demo.workflow.NotBlockStateFlowDemo#console: 
n2 完成
INFO 2026-01-13 19:01:17.179 #52042 [-main] demo.workflow.NotBlockStateFlowDemo#console: 
n3 完成
--------------------
```
