Модуль Событие
module Event: sig .. end
Синхронное взаимодействие первого класса.
Этот модуль реализует синхронное межпотоковое взаимодействие через каналы. Как и в системе Concurrent ML Джона Реппи, события взаимодействия являются значениями первого класса: они могут быть построены и объединены независимо, прежде чем быть предложенными для взаимодействия.
type 'a channel
Тип каналов связи, передающих значения типа 'a.
val new_channel : unit -> 'a channel
Возвращает новый канал.
type +'a event
Тип событий взаимодействия, возвращающих результат типа 'a.
val send : 'a channel -> 'a -> unit event
send ch v возвращает событие, состоящее в отправке значения v по каналу ch. Значение результата этого события равно ().
val receive : 'a channel -> 'a event
receive ch возвращает событие, состоящее в получении значения из канала ch. Значение результата этого события — полученное значение.
val always : 'a -> 'a event
always v возвращает событие, всегда готовое к синхронизации. Значение результата этого события равно v.
val choose : 'a event list -> 'a event
choose evl возвращает событие, являющееся альтернативой всем событиям в списке evl.
val wrap : 'a event -> ('a -> 'b) -> 'b event
wrap ev fn возвращает событие, выполняющее те же операции взаимодействия, что и ev, а затем применяет функцию постобработки fn к значению возврата.
val wrap_abort : 'a event -> (unit -> unit) -> 'a event
wrap_abort ev fn возвращает событие, выполняющее те же операции взаимодействия, что и ev, но если оно не выбрано, функция fn вызывается после синхронизации.
val guard : (unit -> 'a event) -> 'a event
guard fn возвращает событие, которое при синхронизации вычисляет fn() и ведет себя как результирующее событие. Это позволяет вычислять события с побочными эффектами во время операции синхронизации.
val sync : 'a event -> 'a
«Синхронизация» на событии: предоставляет весь мир внешнему миру все возможности взаимодействия, указанные в событии, и блокируется, пока не произойдет одно из взаимодействий. Значение результата этого взаимодействия возвращается.
val select : 'a event list -> 'a
«Синхронизация» на альтернативе событий. select evl — сокращение для sync(choose evl).
val poll : 'a event -> 'a option
Неблокирующая версия Event.sync: предоставляет весь мир внешнему миру все возможности взаимодействия, указанные в событии, и если одно из них может произойти немедленно, выполняет его и возвращает Some r где r — значение результата этого взаимодействия. В противном случае возвращает None без блокировки.
© 1995-2022 INRIA.
https://v2.ocaml.org/releases/4.14/htmlman/libref/Event.html