logo search
Bolshakov_Poyasnitelnaya_zapiska

2.2.2.7 События и подписки

С помощью механизма подписок на события одна задача может оповестить о событии множество других задач. Для этого оповещаемые задачи необходимо подписать на событие, то есть связать функции этих задач с событием, при возникновении которого и должны запускаться подписанные функции. Подписываемые на событие функции должны быть публичными и быть согласованными с сигнатурой события: список их параметров должен соответствовать списку параметров события. У событий, в отличие от функций, отсутствует понятие возвращаемого значения.

Подписка, изображаемая на диаграмме задач, является начальной (инициализационной): ее можно изменять в процессе выполнения программы. Другими словами, подписка в языке является динамической (аналогично этому, в дизайнере форм программ для ЭВМ, например, средствами интегрированной среды разработки Microsoft Visual Studio [34] или Borland Delphi [35], пользователь рисует только первоначальную конфигурацию компонентов, но может ее менять в коде, также может в процессе выполнения подменить обработчики событий). Выполнить подписку (как и отписку) можно из любого места программного кода.

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