С акторами не всё так просто. Вот вам небольшая демка того, как в системе акторов можно реализовать итерацию таким образом, чтобы её можно было безопасно прервать. Я собираюсь использовать этот подход для того, чтобы организовать работу с код-ассистентом и тулами, которые он запускает. Это нужно сделать так, чтобы код-ассистента можно было прервать в любой момент и сделать это безопасно. В этом демо используется фреймворк Sento, реализующий актеры для Common Lisp. Вот полный код примера: (defun make-interruptable-actor-loop-example () (ac:actor-of *sys* :destroy (lambda (&rest args) ;; По сообщению :stop актор будет полностью ;; остановлен и его нельзя будет запустить ещё раз (log:info "Destroy called with ARGS = ~A" args)) :receive (let ((stopped nil)) (lambda (message) (log:info "Processing" message) (case message ;; Но с помощью :break итерацию можно приостановить, ;; а потом продолжить заново с помощью :run. (:break (log:info "Stopping") (setf stopped t)) (:run (log:info "Runni
Итерация которую можно прервать
17 мая17 мая
1 мин