(use-package async :ensure t :defer 5 :init (setq async-bytecomp-allowed-packages '(all)) :config ;; async compiling package (async-bytecomp-package-mode t) (dired-async-mode 1) ;; limit number of async processes (eval-when-compile (require 'cl-lib)) (defvar async-maximum-parallel-procs 4) (defvar async--parallel-procs 0) (defvar async--queue nil) (defvar-local async--cb nil) (advice-add #'async-start :around (lambda (orig-func func &optional callback) (if (>= async--parallel-procs async-maximum-parallel-procs) (push `(,func ,callback) async--queue) (cl-incf async--parallel-procs) (let ((future (funcall orig-func func (lambda (re) (cl-decf async--parallel-procs) (when async--cb (funcall async--cb re)) (when-let (args (pop async--queue)) (apply #'async-start args)))))) (with-current-buffer (process-buffer future) (setq async--cb callback))))) '((name . --queue-dispatch))) )