Да, ваш сценарий немного сложен для понимания.Почему ваш стартовый рабочий процесс в пике?Вы ожидаете отменить операцию «Начать рабочий процесс»?
Вы, конечно, могли бы вообще избавиться от пиков и получить последовательность с помощью «Начать рабочий процесс» -> «Сделать некоторые вещи» -> «Завершить рабочий процесс», но я подозреваю, что это только потому, что ваша диаграммаупрощение сценария.
Возможно, вы должны спросить себя:
Как человек / код, вызывающий мою операцию Finish, получает уведомление о том, что процесс может быть завершен или (в зависимости откак вы хотите, чтобы это было реализовано) чтобы их вызов завершился неудачно, и им нужно повторить попытку позже? .
Если ничего из вышеперечисленного не применимо, поскольку вы используете одностороннюю передачу сообщений, то один способ атаковатьпроблема заключается в том, чтобы держать FinishWorkflow внутри цикла while с условием, установленным в «FinishWorkflow = false», поэтому он будет продолжать цикл до последнего вызова после того, как для переменной FinishWorkflow установлено значение true.Затем вы можете избавиться от Inner Pick, Branch2, задержки и т. Д. Единственный нужный вам пик - после Start и ветки 1 будет содержаться ваше время с финишем внутри, а Branch два будет содержать любой код вычисления, который у вас есть, когдаготово, установит для переменной окончания рабочего процесса значение true.
Помните, что действие получения заблокирует текущую ветвь и будет ждать сообщения, поэтому вам не требуется задержка для продолжения проверки значения, фактически сзадержка, ваша активность будет без необходимости просыпаться и искать вход, когда его не было.Довольно дорогой и не масштабируемый.