Flow Framework: как ведет себя @Signal и может использоваться для выполнения некоторых динамических задач, которые изменяют поток выполнения в SWF

Некоторые из моих наблюдений по исследованию структуры потока:

@Signal начинает выполняться при повторном воспроизведении сигнала после получения сигнала. Метод @Signal выполняется во всех будущих повторениях одного и того же рабочего процесса. (Как только сигнал получен, при каждом воспроизведении решатель выполняет @Signal). Методы @Asynchronus не должны быть долго выполняющимися задачами, так как решающее лицо будет планировать задачи задач только после того, как все методы @Asynch завершат выполнение.

Верны ли мои наблюдения? Если да: то что, если в том же рабочем процессе я хочу сигнал, который выполняет некоторую задачу, а затем прекращает выполнение для будущих повторов. Например, сигнал паузы: пользователь может приостанавливать и возобновлять рабочий процесс несколько раз.

Другая проблема: как обрабатываются следующие типы дел потоком: Время ожидания истекает, и между тем наступают два события: отмена рабочего процесса и действие завершено. Как решающий элемент определяет, что они связаны, и если отмена выполняется, то не отвечает на ActivityComplatedEvent.

1 ответ

Решение

Это помогает не думать о поведении рабочего процесса с точки зрения воспроизведения. Воспроизведение - это всего лишь механизм восстановления состояния рабочего процесса. Но когда написана логика рабочего процесса, она на самом деле не видна, кроме требования детерминизма, и этот код рабочего процесса является асинхронным и неблокирующим. Поэтому никогда не думайте о воспроизведении при разработке логики рабочего процесса. Напишите его как локально выполняемую асинхронную программу.

Таким образом, когда воспроизведение не так, @Signal - это просто метод обратного вызова, который выполняется один раз для каждого принятого сигнала. Поэтому, если вы вызываете какое-либо действие из метода @Signal, оно будет выполнено один раз.

Что касается второго вопроса, то это зависит от порядка получения отмены и завершения операции. Если отмена выполняется сначала, то отмена доставляется сначала в рабочий процесс, что может привести к отмене действия. Отмена фактически блокирует ожидание отмены действия. Завершение действия (которое является следующим событием) разблокирует отмену для него. Если завершение является вторым, то действие завершается, и все последующее событие отменяется следующим событием. В большинстве случаев результат в точности совпадает с полученным завершением операции, но вся логика после этого отменяется.

Другие вопросы по тегам