class ClearUserAuthorizationCacheEvent extends DefaultAsyncEvent {
    private Set<String> userId;

    private boolean all;

    private boolean async;

    private static final String DISABLE_KEY = ClearUserAuthorizationCacheEvent.class + "_Disabled";

    public static <T> Flux<T> disable(Flux<T> task) {
        return task.contextWrite(Context.of(DISABLE_KEY, true));
    }

    public static <T> Mono<T> disable(Mono<T> task) {
        return task.contextWrite(Context.of(DISABLE_KEY, true));
    }

    public static Mono<Void> doOnEnabled(Mono<Void> task) {
        return Mono.deferContextual(ctx -> {
            if (ctx.hasKey(DISABLE_KEY)) {
                return Mono.empty();
            }
            return task;
        });
    }

    @Override
    public synchronized void async(Publisher<?> publisher) {
        super.async(doOnEnabled(Mono.fromDirect(publisher).then()));
    }

    public static ClearUserAuthorizationCacheEvent of(Collection<String> collection) {<FILL_FUNCTION_BODY>}

    public static ClearUserAuthorizationCacheEvent all() {
        return ClearUserAuthorizationCacheEvent.of((String[]) null);
    }

    //兼容async
    public ClearUserAuthorizationCacheEvent useAsync() {
        this.async = true;
        return this;
    }

    @Override
    public Mono<Void> publish(ApplicationEventPublisher eventPublisher) {
        this.async = true;
        return super.publish(eventPublisher);
    }

    public static ClearUserAuthorizationCacheEvent of(String... userId) {

        return of(userId == null ? null : Arrays.asList(userId));
    }
}

        ClearUserAuthorizationCacheEvent event = new ClearUserAuthorizationCacheEvent();
        if (collection == null || collection.isEmpty()) {
            event.all = true;
        } else {
            event.userId = new HashSet<>(collection);
        }
        return event;
    
<methods>public non-sealed void <init>() ,public synchronized void async(Publisher<?>) ,public synchronized void first(Publisher<?>) ,public Mono<java.lang.Void> getAsync() ,public boolean hasListener() ,public Mono<java.lang.Void> publish(ApplicationEventPublisher) ,public void transform(Function<Mono<?>,Publisher<?>>) ,public void transformFirst(Function<Mono<?>,Publisher<?>>) <variables>private transient Mono<?> async,private transient Mono<?> first,private transient boolean hasListener