actor: extract common code to ac-step function

This commit is contained in:
Helmut Merz 2025-06-17 13:35:46 +02:00
parent 91e52e7437
commit 5565a60353

View file

@ -54,11 +54,14 @@
(:method ((tsk async:task) bhv)
(let ((msg (async:rcv tsk)))
(unless (eq (content msg) +quit-message+)
(let ((*self* tsk))
(handler-case (funcall bhv msg)
(error (error) (util:lg :error "behavior" msg error))))
(ac-step tsk bhv msg)
(ac-loop tsk (async:behavior tsk))))))
(defun ac-step (tsk bhv msg)
(let ((*self* tsk))
(handler-case (funcall bhv msg)
(error (error) (util:lg :error "behavior" msg error)))))
;;;; the core (classical, i.e. Hewitt) actor API
(defun create (bhv)
@ -79,10 +82,8 @@
(if ok
(progn
(async:set-status tsk :running)
(let ((*self* tsk))
(handler-case (funcall bhv msg)
(error (error) (util:lg :error "behavior" msg error)))
(ac-loop tsk (async:behavior tsk))))
(ac-step tsk bhv msg)
(ac-loop tsk (async:behavior tsk)))
(async:set-status tsk :suspended))))
(defmethod send ((tsk async:restartable-task) msg)